rem: p = (unsigned char*)soap_save_block(soap, NULL);
add: p = (unsigned char*)soap_save_block(soap, NULL, 0);
context: soap_gethex(struct soap *soap, int *n){#ifdef WITH_FAST  soap->labidx = 0;  for (;;)  { register char *s;    register int i, k;    if (soap_append_lab(soap, NULL, 0))      return NULL;    s = soap->labbuf + soap->labidx;    k = soap->lablen - soap->labidx;    soap->labidx = soap->lablen;    for (i = 0; i < k; i++)    { register char d1, d2;      register wchar c;      c = soap_get(soap);      if (soap_isxdigit(c))      { d1 = (char)c;        c = soap_get(soap);	if (soap_isxdigit(c))          d2 = (char)c;        else        { soap->error = SOAP_TYPE;          return NULL;        }      }      else      { unsigned char *p;        soap_unget(soap, c);        if (n)          *n = (int)(soap->lablen - k + i);        p = (unsigned char*)soap_malloc(soap, soap->lablen - k + i);	if (p)	  memcpy(p, soap->labbuf, soap->lablen - k + i);        return p;      }      *s++ = ((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0');    }  }#else  if (soap_new_block(soap))    return NULL;  for (;;)  { register int i;    register char *s = (char*)soap_push_block(soap, SOAP_BLKLEN);    if (!s)    { soap_end_block(soap);      return NULL;    }    for (i = 0; i < SOAP_BLKLEN; i++)    { register char d1, d2;      register wchar c = soap_get(soap);      if (soap_isxdigit(c))      { d1 = (char)c;        c = soap_get(soap);	if (soap_isxdigit(c))          d2 = (char)c;        else        { soap_end_block(soap);	  soap->error = SOAP_TYPE;          return NULL;        }      }      else      { unsigned char *p;        soap_unget(soap, c);        if (n)          *n = soap_size_block(soap, i);        p = (unsigned char*)soap_save_block(soap, NULL);        return p;      }      *s++ = ((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0');    }  }#endif}