Procházet zdrojové kódy

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 před 13 roky
rodič
revize
65c389a1e1
3 změnil soubory, kde provedl 19 přidání a 19 odebrání
  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;
     }