Bert Huijben wrote:

> Julian Foad wrote:
>>  (1) Inserting a UCS-2 string into a UTF-8 error message will surely fail
>> in one  way or another.
>> 
>>  (2) Just below this error handling, the code to write the null terminator
>> is bogus.
>> 
>>  I suggest:
[...]
>>  -          err = svn_error_createf(apr_err, NULL,
>>  -                                  _("Can't convert module path "
>>  -                                    "to UTF-8 from UCS-2: '%s'"),
>>  -                                  ucs2_path);
>>  +          err = svn_error_create(apr_err, NULL,
>>  +                                 _("Can't convert module path "
>>  +                                   "to UTF-8 from UCS-2");
> 
> apr_err is no longer defined, so this code wouldn't compile.

Sure, that's just because this pseudo-patch is against the older code, not your 
latest version.

> Most likely the second by of the UCS-2 string is 0 and in all cases the
> final word is 0, so this won't crash. So we can fix this in a later release
> if necessary.

I agree.

>>           }
>>         else
>>           {
>>  -          utf8_path[outlength - outbytes] = '\0';
>>  +          utf8_path[outbytes] = '\0';
>>             internal_path = svn_dirent_internal_style(utf8_path, pool);
> 
> I'm surprised that this code worked correctly in 1.7... but it did. This
> code path has been active in at least the SlikSvn build.

For some definition of 'correctly' :-)

- Julian

> 
>     Bert
>> 
>>  [...]
>> 
>>  ]]]
>> 
>>  The existing code puts the null terminator in the wrong place.  This will
>>  truncate any path that is longer than PATH_MAX/2, and will fail to terminate
>>  any path shorter than PATH_MAX/2.  WideCharToMultiByte() explicitly does
>>  not promise to write a null terminator.  This code will work despite this
>> bug  iff:
>> 
>>    * path length < MAX_PATH/2
>> 
>>  and either of:
>> 
>>    * WideCharToMultiByte() adds a null terminator
>>    * apr_alloc() clears the memory
>> 
>>  Otherwise, it will produce the wrong result.
>> 
>>  - Julian
>

Reply via email to