]> granicus.if.org Git - php/commitdiff
MFH:
authorFelipe Pena <felipe@php.net>
Sun, 11 Jan 2009 18:47:17 +0000 (18:47 +0000)
committerFelipe Pena <felipe@php.net>
Sun, 11 Jan 2009 18:47:17 +0000 (18:47 +0000)
- Improved fix for #47035 (win32 part by Henrique M. Decaria)
[DOC] The TXT part needs be returned as an array of strings. (dns_get_record())

ext/standard/dns.c
ext/standard/dns_win32.c

index 63f24b97d412a978b527709c95e5b30bcb2081fb..8b5919c21eaf706b5501b3a0cccbd8681562d965 100644 (file)
@@ -456,20 +456,29 @@ static u_char *php_parserr(u_char *cp, querybuf *answer, int type_to_fetch, int
                        break;
                case DNS_T_TXT:
                        {
+                               zval *txtarray = NULL;
                                int ll = 0;
+                               char *txt = NULL;
 
                                add_assoc_string(*subarray, "type", "TXT", 1);
                                tp = emalloc(dlen + 1);
                                
+                               MAKE_STD_ZVAL(txtarray);
+                               array_init(txtarray);
+                               
                                while (ll < dlen) {
+                                       txt = tp + ll;
                                        n = cp[ll];
-                                       memcpy(tp + ll , cp + ll + 1, n);
+                                       memcpy(txt, cp + ll + 1, n);
                                        ll = ll + n + 1;
+                                       tp[ll] = '\0';
+                                       add_next_index_stringl(txtarray, txt, n, 1);    
                                }
-                               tp[dlen] = '\0';
+
                                cp += dlen;
 
-                               add_assoc_stringl(*subarray, "txt", tp, dlen - 1, 0);
+                               add_assoc_zval(*subarray, "txt", txtarray);
+                               efree(tp);
                        }
                        break;
                case DNS_T_SOA:
index 07bd362cf21e81e56e45753ba7fa95327f955791..33ad88da44dc0548bdfa7ac9544e0c4ad4201cc5 100644 (file)
@@ -194,25 +194,24 @@ static void php_parserr(PDNS_RECORD pRec, int type_to_fetch, int store, zval **s
                                int i = 0;
                                DNS_TXT_DATA *data_txt = &pRec->Data.TXT;
                                DWORD count = data_txt->dwStringCount;
-                               char *txt, *txt_dst;
+                               char *txt;
                                long txt_len;
+                               zval *txtarray;
 
-                               add_assoc_string(*subarray, "type", "TXT", 1);
+                               MAKE_STD_ZVAL(txtarray);
+                               array_init(txtarray);
 
-                               txt_len = 0;
-                               for (i = 0; i < count; i++) {
-                                       txt_len += strlen(data_txt->pStringArray[i]) + 1;
-                               }
+                               add_assoc_string(*subarray, "type", "TXT", 1);
 
-                               txt = ecalloc(txt_len * 2, 1);
-                               txt_dst = txt;
                                for (i = 0; i < count; i++) {
-                                       int len = strlen(data_txt->pStringArray[i]);
-                                       memcpy(txt_dst, data_txt->pStringArray[i], len);
-                                       txt_dst += len;
+                                       txt_len = strlen(data_txt->pStringArray[i]);
+                                       txt = emalloc(txt_len + 1);
+                                       memcpy(txt, data_txt->pStringArray[i], txt_len);
+                                       txt[txt_len] = '\0';
+                                       add_next_index_stringl(txtarray, txt, txt_len, 0);
                                }
 
-                               add_assoc_string(*subarray, "txt", txt, 0);
+                               add_assoc_zval(*subarray, "txt", txtarray);
                        }
                        break;