in src/ujdecode.c [172:199]
static JSOBJ newString(void* context, wchar_t *start, wchar_t *end)
{
struct DecoderState *ds = context;
size_t len;
StringItem *si = (StringItem *) alloc(ds, sizeof(StringItem) + (end - start + 1) * sizeof(wchar_t));
len = end - start;
si->item.type = UJT_String;
si->str.ptr = (wchar_t *) (si + 1);
si->str.cchLen = len;
if (len < 4)
{
wchar_t *dst = si->str.ptr;
wchar_t *end = dst + len;
while (dst < end)
{
*(dst++) = *(start++);
}
}
else
{
memcpy (si->str.ptr, start, len * sizeof(wchar_t));
}
si->str.ptr[len] = '\0';
return (JSOBJ) si;
}