Hi Huw,
+ do + { + /* Calculate space needed, including trailing space */ + string_len = lstrlenW(cur->Element); + memory_needed = (string_len + 1) * sizeof(WCHAR);
Should be one WCHAR more to allow for the ' ';
In this case, I think the code is correct - if there is a trailing space, then there won't be a null character after it (as we'll have another URL following the space). If it's the last entry in the list, then instead of a trailing space there will be a null character.
+ if (cur_buf_pos + memory_needed > buffer + buffer_size) + return E_INVALIDARG; + + if (cur != list) + *cur_buf_pos++ = ' '; + + memcpy(cur_buf_pos, cur->Element, memory_needed);
And the memcpy size would then need to be (string_len + 1) * sizeof(WCHAR)
In this case the null character is being copied as part of the memcpy statement, then is being replaced by the space on the following loop iteration (when cur != list). Thanks, Owen