瀏覽代碼

ncd: modules: make some modules not check if strings have nulls inside, but just pass them through to parsing
functions which can handle nulls in the input

ambrop7 13 年之前
父節點
當前提交
65c389a1e1
共有 3 個文件被更改,包括 19 次插入19 次删除
  1. 10 9
      ncd/modules/foreach.c
  2. 2 3
      ncd/modules/from_string.c
  3. 7 7
      ncd/modules/netmask.c

+ 10 - 9
ncd/modules/foreach.c

@@ -74,6 +74,7 @@
 #include <system/BReactor.h>
 #include <ncd/NCDModule.h>
 #include <ncd/static_strings.h>
+#include <ncd/value_utils.h>
 
 #include <generated/blog_channel_ncd_foreach.h>
 
@@ -622,24 +623,24 @@ static void func_new_foreach_emb (void *vo, NCDModuleInst *i, const struct NCDMo
         ModuleLog(i, BLOG_ERROR, "wrong arity");
         goto fail0;
     }
-    if (!NCDVal_IsString(arg_template) || !NCDVal_IsStringNoNulls(arg_name1) || (!NCDVal_IsInvalid(arg_name2) && !NCDVal_IsStringNoNulls(arg_name2))) {
+    if (!NCDVal_IsString(arg_template) || !NCDVal_IsString(arg_name1) || (!NCDVal_IsInvalid(arg_name2) && !NCDVal_IsString(arg_name2))) {
         ModuleLog(i, BLOG_ERROR, "wrong type");
         goto fail0;
     }
     
-    const char *name1_str = NCDVal_StringValue(arg_name1);
-    const char *name2_str = (NCDVal_IsInvalid(arg_name2) ? NULL : NCDVal_StringValue(arg_name2));
-    
-    NCD_string_id_t name1 = NCDStringIndex_Get(i->params->iparams->string_index, name1_str);
+    NCD_string_id_t name1 = ncd_get_string_id(arg_name1, i->params->iparams->string_index);
     if (name1 < 0) {
-        ModuleLog(i, BLOG_ERROR, "NCDStringIndex_Get failed");
+        ModuleLog(i, BLOG_ERROR, "ncd_get_string_id failed");
         goto fail0;
     }
     
     NCD_string_id_t name2 = -1;
-    if (name2_str && (name2 = NCDStringIndex_Get(i->params->iparams->string_index, name2_str)) < 0) {
-        ModuleLog(i, BLOG_ERROR, "NCDStringIndex_Get failed");
-        goto fail0;
+    if (!NCDVal_IsInvalid(arg_name2)) {
+        name2 = ncd_get_string_id(arg_name2, i->params->iparams->string_index);
+        if (name2 < 0) {
+            ModuleLog(i, BLOG_ERROR, "ncd_get_string_id failed");
+            goto fail0;
+        }
     }
     
     func_new_common(vo, i, arg_collection, arg_template, NCDVal_NewInvalid(), name1, name2);

+ 2 - 3
ncd/modules/from_string.c

@@ -62,17 +62,16 @@ static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new
         ModuleLog(i, BLOG_ERROR, "wrong arity");
         goto fail0;
     }
-    if (!NCDVal_IsStringNoNulls(str_arg)) {
+    if (!NCDVal_IsString(str_arg)) {
         ModuleLog(i, BLOG_ERROR, "wrong type");
         goto fail0;
     }
-    const char *str = NCDVal_StringValue(str_arg);
     
     // init mem
     NCDValMem_Init(&o->mem);
     
     // parse value string
-    if (!NCDValParser_Parse(str, strlen(str), &o->mem, &o->val)) {
+    if (!NCDValParser_Parse(NCDVal_StringValue(str_arg), NCDVal_StringLength(str_arg), &o->mem, &o->val)) {
         ModuleLog(i, BLOG_ERROR, "failed to parse");
         goto fail1;
     }

+ 7 - 7
ncd/modules/netmask.c

@@ -93,14 +93,14 @@ static void prefix_to_mask_func_init (void *vo, NCDModuleInst *i, const struct N
         ModuleLog(i, BLOG_ERROR, "wrong arity");
         goto fail0;
     }
-    if (!NCDVal_IsStringNoNulls(prefix_arg)) {
+    if (!NCDVal_IsString(prefix_arg)) {
         ModuleLog(i, BLOG_ERROR, "wrong type");
         goto fail0;
     }
     
     // parse prefix
     int prefix;
-    if (!ipaddr_parse_ipv4_prefix((char *)NCDVal_StringValue(prefix_arg), &prefix)) {
+    if (!ipaddr_parse_ipv4_prefix_bin((char *)NCDVal_StringValue(prefix_arg), NCDVal_StringLength(prefix_arg), &prefix)) {
         ModuleLog(i, BLOG_ERROR, "bad prefix");
         goto fail0;
     }
@@ -125,21 +125,21 @@ static void ipv4_net_from_addr_and_prefix_func_init (void *vo, NCDModuleInst *i,
         ModuleLog(i, BLOG_ERROR, "wrong arity");
         goto fail0;
     }
-    if (!NCDVal_IsStringNoNulls(addr_arg) || !NCDVal_IsStringNoNulls(prefix_arg)) {
+    if (!NCDVal_IsString(addr_arg) || !NCDVal_IsString(prefix_arg)) {
         ModuleLog(i, BLOG_ERROR, "wrong type");
         goto fail0;
     }
     
     // parse addr
     uint32_t addr;
-    if (!ipaddr_parse_ipv4_addr((char *)NCDVal_StringValue(addr_arg), &addr)) {
+    if (!ipaddr_parse_ipv4_addr_bin((char *)NCDVal_StringValue(addr_arg), NCDVal_StringLength(addr_arg), &addr)) {
         ModuleLog(i, BLOG_ERROR, "bad addr");
         goto fail0;
     }
     
     // parse prefix
     int prefix;
-    if (!ipaddr_parse_ipv4_prefix((char *)NCDVal_StringValue(prefix_arg), &prefix)) {
+    if (!ipaddr_parse_ipv4_prefix_bin((char *)NCDVal_StringValue(prefix_arg), NCDVal_StringLength(prefix_arg), &prefix)) {
         ModuleLog(i, BLOG_ERROR, "bad prefix");
         goto fail0;
     }
@@ -191,14 +191,14 @@ static void mask_to_prefix_func_init (void *vo, NCDModuleInst *i, const struct N
         ModuleLog(i, BLOG_ERROR, "wrong arity");
         goto fail0;
     }
-    if (!NCDVal_IsStringNoNulls(mask_arg)) {
+    if (!NCDVal_IsString(mask_arg)) {
         ModuleLog(i, BLOG_ERROR, "wrong type");
         goto fail0;
     }
     
     // parse mask
     uint32_t mask;
-    if (!ipaddr_parse_ipv4_addr((char *)NCDVal_StringValue(mask_arg), &mask)) {
+    if (!ipaddr_parse_ipv4_addr_bin((char *)NCDVal_StringValue(mask_arg), NCDVal_StringLength(mask_arg), &mask)) {
         ModuleLog(i, BLOG_ERROR, "bad mask");
         goto fail0;
     }