This is not about embedded nulls, this is about possibly not null terminated strings. If there is zero somewhere in the buffer then we should only convert string up to that zero; if there isn&#39;t any nulls, then we have to convert full string and null-terminate string. This can be coded prettier, though:<br>
<br>if (l&gt;0)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp; void *eos = memchr(str, 0, l);<br>&nbsp;&nbsp;&nbsp;&nbsp; if (eos)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l = (LONG)(eos-str);<br>}<br><br>and always zero-pad afterwards<br><br><div><span class="gmail_quote">2008/3/11, Alexandre Julliard &lt;<a href="mailto:julliard@winehq.org">julliard@winehq.org</a>&gt;:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hin-Tak Leung &lt;<a href="mailto:htl10@users.sourceforge.net">htl10@users.sourceforge.net</a>&gt; writes:<br> <br> &gt; This is the fix to bug 8246 to get HtmlHelpW to work correctly.<br> &gt; It was first worked on by Andrey Turkin and updated later by me.<br>
 <br> <br>Please add a proper log entry describing the change.<br> <br> &gt; -static inline LPWSTR strdupAtoW(LPCSTR str)<br> &gt; +static inline LPWSTR strdupnAtoW(LPCSTR str, LONG l)<br> &gt;&nbsp;&nbsp;{<br> &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPWSTR ret;<br>
 &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD len;<br> &gt; +&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;&nbsp; zero_pad;<br> &gt;<br> &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!str)<br> &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return NULL;<br> &gt;<br> &gt; -&nbsp;&nbsp;&nbsp;&nbsp;len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);<br> &gt; +&nbsp;&nbsp;&nbsp;&nbsp;if (l&gt;0)<br>
 &gt; +&nbsp;&nbsp;&nbsp;&nbsp;{<br> &gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LONG i;<br> &gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zero_pad = TRUE;<br> &gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i=0;i&lt;l;i++)<br> &gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br> &gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!str[i])<br> &gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br> &gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zero_pad = FALSE;<br>
 &gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l = i+1;<br> &gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br> &gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br> &gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br> &gt; +&nbsp;&nbsp;&nbsp;&nbsp;} else {<br> &gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zero_pad = FALSE;<br> &gt; +&nbsp;&nbsp;&nbsp;&nbsp;}<br> &gt; +<br> &gt; +&nbsp;&nbsp;&nbsp;&nbsp;len = MultiByteToWideChar(CP_ACP, 0, str, l, NULL, 0);<br>
 &gt; +&nbsp;&nbsp;&nbsp;&nbsp;if (zero_pad)<br> &gt; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len++;<br> <br> This is ugly and unnecessary, MultiByteToWideChar handles embedded nulls<br> just fine.<br> <br><br> --<br> Alexandre Julliard<br> <a href="mailto:julliard@winehq.org">julliard@winehq.org</a><br>
 <br> <br> </blockquote></div><br>