fixed the standard console handler to return an error if ARGV is not a map
This commit is contained in:
		| @ -872,7 +872,14 @@ int StdAwk::open_console_in (Console& io) | |||||||
| 		 */ | 		 */ | ||||||
| 		argv = qse_awk_rtx_getgbl (rtx, this->gbl_argv); | 		argv = qse_awk_rtx_getgbl (rtx, this->gbl_argv); | ||||||
| 		QSE_ASSERT (argv != QSE_NULL); | 		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; | 		map = ((qse_awk_val_map_t*)argv)->map; | ||||||
| 		QSE_ASSERT (map != QSE_NULL); | 		QSE_ASSERT (map != QSE_NULL); | ||||||
|  | |||||||
| @ -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); | 			argv = qse_awk_rtx_getgbl(rtx, xtn->gbl_argv); | ||||||
| 			QSE_ASSERT (argv != QSE_NULL); | 			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; | 			map = ((qse_awk_val_map_t*)argv)->map; | ||||||
| 			QSE_ASSERT (map != QSE_NULL); | 			QSE_ASSERT (map != QSE_NULL); | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user