diff --git a/qse/lib/awk/StdAwk.cpp b/qse/lib/awk/StdAwk.cpp index 07db16c3..9e03c747 100644 --- a/qse/lib/awk/StdAwk.cpp +++ b/qse/lib/awk/StdAwk.cpp @@ -872,7 +872,14 @@ int StdAwk::open_console_in (Console& io) */ argv = qse_awk_rtx_getgbl (rtx, this->gbl_argv); QSE_ASSERT (argv != QSE_NULL); - QSE_ASSERT (QSE_AWK_RTX_GETVALTYPE (rtx, argv) == QSE_AWK_VAL_MAP); + if (QSE_AWK_RTX_GETVALTYPE(rtx, argv) != QSE_AWK_VAL_MAP) + { + /* with FLEXMAP on, you can change ARGV to a scalar. + * BEGIN { ARGV="xxx"; } + * you must not do this. */ + qse_awk_rtx_seterrfmt (rtx, QSE_AWK_EINVAL, QSE_NULL, QSE_T("phony value in ARGV")); + return -1; + } map = ((qse_awk_val_map_t*)argv)->map; QSE_ASSERT (map != QSE_NULL); diff --git a/qse/lib/awk/std.c b/qse/lib/awk/std.c index ca3dd986..2fd2776b 100644 --- a/qse/lib/awk/std.c +++ b/qse/lib/awk/std.c @@ -1658,7 +1658,14 @@ static int open_rio_console (qse_awk_rtx_t* rtx, qse_awk_rio_arg_t* riod) */ argv = qse_awk_rtx_getgbl(rtx, xtn->gbl_argv); QSE_ASSERT (argv != QSE_NULL); - QSE_ASSERT (QSE_AWK_RTX_GETVALTYPE (rtx, argv) == QSE_AWK_VAL_MAP); + if (QSE_AWK_RTX_GETVALTYPE(rtx, argv) != QSE_AWK_VAL_MAP) + { + /* with FLEXMAP on, you can change ARGV to a scalar. + * BEGIN { ARGV="xxx"; } + * you must not do this. */ + qse_awk_rtx_seterrfmt (rtx, QSE_AWK_EINVAL, QSE_NULL, QSE_T("phony value in ARGV")); + return -1; + } map = ((qse_awk_val_map_t*)argv)->map; QSE_ASSERT (map != QSE_NULL);