X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Furi.c;h=efa11bf4df23af6123388ba8057023643a22149a;hp=ecf1adc3fd2803ec195e7f6d35294b486615734c;hb=2f570511e1ca2d63705dc425e9e7bc3f3d744f64;hpb=692cfa1de9dd855c1725db48f6d0a2cddcae9fcd diff --git a/src/uri.c b/src/uri.c index ecf1adc..efa11bf 100644 --- a/src/uri.c +++ b/src/uri.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2011 Index Data + * Copyright (C) Index Data * See the file LICENSE for details. */ /** @@ -101,7 +101,7 @@ void yaz_array_to_uri(char **path, ODR o, char **name, char **value) for(i = 0; name[i]; i++) sz += strlen(name[i]) + 3 + strlen(value[i]) * 3; *path = (char *) odr_malloc(o, sz); - + for(i = 0; name[i]; i++) { size_t ilen; @@ -132,6 +132,13 @@ int yaz_uri_to_array(const char *path, ODR o, char ***name, char ***val) { cp++; no++; + while (*cp && *cp != '=' && *cp != '&') + { + /* check that x-form names looks sane */ + if (*cp <= ' ' || *cp >= 127) + return 0; + cp++; + } } *name = (char **) odr_malloc(o, no * sizeof(char*)); *val = (char **) odr_malloc(o, no * sizeof(char*)); @@ -146,10 +153,7 @@ int yaz_uri_to_array(const char *path, ODR o, char ***name, char ***val) for (cp = path; *cp && *cp != '=' && *cp != '&'; cp++) ; - (*name)[no] = (char *) odr_malloc(o, (cp-path)+1); - memcpy((*name)[no], path, cp-path); - (*name)[no][cp-path] = '\0'; - + (*name)[no] = odr_strdupn(o, path, cp - path); path = cp; if (*path == '=') { @@ -175,42 +179,6 @@ int yaz_uri_to_array(const char *path, ODR o, char ***name, char ***val) return no; } -char *yaz_uri_val(const char *path, const char *name, ODR o) -{ - size_t nlen = strlen(name); - if (*path != '?') - return 0; - path++; - while (path && *path) - { - const char *p1 = strchr(path, '='); - if (!p1) - break; - if ((size_t)(p1 - path) == nlen && !memcmp(path, name, nlen)) - { - size_t i = 0; - char *ret; - - path = p1 + 1; - p1 = strchr(path, '&'); - if (!p1) - p1 = strlen(path) + path; - ret = (char *) odr_malloc(o, p1 - path + 1); - while (*path && *path != '&') - { - size_t l = 3; - ret[i++] = decode_uri_char(path, &l); - path += l; - } - ret[i] = '\0'; - return ret; - } - path = strchr(p1, '&'); - if (path) - path++; - } - return 0; -} /* * Local variables: