X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-compat-howl%2Ftext.c;h=3b717bef610cd54d02ecfdb7b11b0f73861fd2d9;hb=78a76e3d5f1d9cc81fd901b8e0263483a7c707d0;hp=cbf51c78a97e5969332b38bb7ace842beb8667db;hpb=a96f0540a6eb9a9cfaabef829982576ebec6e596;p=catta diff --git a/avahi-compat-howl/text.c b/avahi-compat-howl/text.c index cbf51c7..3b717be 100644 --- a/avahi-compat-howl/text.c +++ b/avahi-compat-howl/text.c @@ -39,6 +39,22 @@ struct _sw_text_record { int buffer_valid; }; +#ifndef HAVE_STRLCPY + +static size_t strlcpy(char *dest, const char *src, size_t n) { + assert(dest); + assert(src); + + if (n > 0) { + strncpy(dest, src, n-1); + dest[n-1] = 0; + } + + return strlen(src); +} + +#endif + sw_result sw_text_record_init(sw_text_record *self) { assert(self); @@ -178,6 +194,7 @@ sw_result sw_text_record_iterator_init( sw_octets text_record, sw_uint32 text_record_len) { + AvahiStringList *txt; assert(self); AVAHI_WARN_LINKAGE; @@ -187,7 +204,13 @@ sw_result sw_text_record_iterator_init( return SW_E_UNKNOWN; } - (*self)->index = (*self)->strlst = avahi_string_list_reverse(avahi_string_list_parse(text_record, text_record_len)); + if (avahi_string_list_parse(text_record, text_record_len, &txt) < 0) { + avahi_free(*self); + *self = NULL; + return SW_E_UNKNOWN; + } + + (*self)->index = (*self)->strlst = avahi_string_list_reverse(txt); return SW_OKAY; } @@ -205,8 +228,8 @@ sw_result sw_text_record_iterator_fina(sw_text_record_iterator self) { sw_result sw_text_record_iterator_next( sw_text_record_iterator self, - char key[255], - sw_uint8 val[255], + char key[SW_TEXT_RECORD_MAX_LEN], + sw_uint8 val[SW_TEXT_RECORD_MAX_LEN], sw_uint32 * val_len) { char *mkey = NULL, *mvalue = NULL; @@ -223,7 +246,8 @@ sw_result sw_text_record_iterator_next( if (avahi_string_list_get_pair(self->index, &mkey, &mvalue, &msize) < 0) return SW_E_UNKNOWN; - avahi_strlcpy(key, mkey, 255); + strlcpy(key, mkey, SW_TEXT_RECORD_MAX_LEN); + memset(val, 0, SW_TEXT_RECORD_MAX_LEN); memcpy(val, mvalue, msize); *val_len = msize;