diff --git a/include/asterisk/config_options.h b/include/asterisk/config_options.h
index b73b276e8304551afdfbb690d9caea4af7bf6124..6b444466f59a5bfc3e7a0ab30e6399853d0f3e22 100644
--- a/include/asterisk/config_options.h
+++ b/include/asterisk/config_options.h
@@ -265,7 +265,7 @@ enum aco_option_type {
 	 * struct test_item {
 	 *     int enabled;
 	 * };
-		aco_option_register(&cfg_info, "enabled", ACO_EXACT, my_types, "no", OPT_BOOL_T, 1, FLDSET(struct test_item, enabled));
+	 * aco_option_register(&cfg_info, "enabled", ACO_EXACT, my_types, "no", OPT_BOOL_T, 1, FLDSET(struct test_item, enabled));
 	 * {endcode}
 	 */
 	OPT_BOOL_T,
@@ -284,13 +284,15 @@ enum aco_option_type {
 	 * struct test_item {
 	 *     unsigned int flags;
 	 * };
-		aco_option_register(&cfg_info, "quiet", ACO_EXACT, my_types, "no", OPT_BOOLFLAG_T, 1, FLDSET(struct test_item, flags), MY_TYPE_ISQUIET);
+	 * aco_option_register(&cfg_info, "quiet", ACO_EXACT, my_types, "no", OPT_BOOLFLAG_T, 1, FLDSET(struct test_item, flags), MY_TYPE_ISQUIET);
 	 * {endcode}
 	 */
-
 	OPT_BOOLFLAG_T,
 
-	/*! \brief Type for default option handler for character arrays
+	/*! \brief Type for default option handler for character array strings
+	 * \note aco_option_register flags:
+	 *   non-zero : String cannot be empty.
+	 *   0        : String can be empty.
 	 * \note aco_option_register varargs:
 	 *   CHARFLDSET macro with a field of type char[]
 	 *
@@ -299,7 +301,7 @@ enum aco_option_type {
 	 * struct test_item {
 	 *     char description[128];
 	 * };
-	 * aco_option_register(&cfg_info, "description", ACO_EXACT, my_types, "none", OPT_CHAR_ARRAY_T, CHARFLDSET(struct test_item, description));
+	 * aco_option_register(&cfg_info, "description", ACO_EXACT, my_types, "none", OPT_CHAR_ARRAY_T, 0, CHARFLDSET(struct test_item, description));
 	 * {endcode}
 	 */
 	OPT_CHAR_ARRAY_T,
@@ -338,7 +340,7 @@ enum aco_option_type {
 	 *     double dub;
 	 * };
 	 * {code}
-	 * aco_option_register(&cfg_info, "doubleopt", ACO_EXACT, my_types, "3", OPT_DOUBLE_T, FLDSET(struct test_item, dub));
+	 * aco_option_register(&cfg_info, "doubleopt", ACO_EXACT, my_types, "3", OPT_DOUBLE_T, 0, FLDSET(struct test_item, dub));
 	 * {endcode}
 	 */
 	OPT_DOUBLE_T,
@@ -393,7 +395,8 @@ enum aco_option_type {
 
 	/*! \brief Type for default option handler for stringfields
 	 * \note aco_option_register flags:
-	 *   none
+	 *   non-zero : String cannot be empty.
+	 *   0        : String can be empty.
 	 * aco_option_register varargs:
 	 *   STRFLDSET macro with the field being the field created by AST_STRING_FIELD
 	 *
diff --git a/main/config_options.c b/main/config_options.c
index d9f1fd4d327996543948d6dee7569d423c15132b..908b6ac124de2a57b7863b13971e5fc4c7347272 100644
--- a/main/config_options.c
+++ b/main/config_options.c
@@ -1342,6 +1342,10 @@ static int stringfield_handler_fn(const struct aco_option *opt, struct ast_varia
 	ast_string_field *field = (const char **)(obj + opt->args[0]);
 	struct ast_string_field_pool **pool = (struct ast_string_field_pool **)(obj + opt->args[1]);
 	struct ast_string_field_mgr *mgr = (struct ast_string_field_mgr *)(obj + opt->args[2]);
+
+	if (opt->flags && ast_strlen_zero(var->value)) {
+		return -1;
+	}
 	ast_string_field_ptr_set_by_fields(*pool, *mgr, field, var->value);
 	return 0;
 }
@@ -1384,7 +1388,7 @@ static int sockaddr_handler_fn(const struct aco_option *opt, struct ast_variable
 	return ast_parse_arg(var->value, PARSE_ADDR | opt->flags, field);
 }
 
-/*! \brief Default handler for doing noithing
+/*! \brief Default handler for doing nothing
  */
 static int noop_handler_fn(const struct aco_option *opt, struct ast_variable *var, void *obj)
 {
@@ -1400,6 +1404,9 @@ static int chararray_handler_fn(const struct aco_option *opt, struct ast_variabl
 	char *field = (char *)(obj + opt->args[0]);
 	size_t len = opt->args[1];
 
+	if (opt->flags && ast_strlen_zero(var->value)) {
+		return -1;
+	}
 	ast_copy_string(field, var->value, len);
 	return 0;
 }