Hello guys,

I am using redland libs in a small in house tool, and I think I have
spotted a minor memory overrun in Rasqal/Raptor on Win32.

In rasqal_query.c, function rasqal_query_prepare(), line 1108
You can see a call to raptor_uri_filename_to_uri_string() with an empty
string.

  if(base_uri)
    base_uri=raptor_uri_copy(base_uri);
  else {
    unsigned char *uri_string=raptor_uri_filename_to_uri_string(""); //
HERE!
    base_uri=raptor_new_uri(uri_string);
    if(uri_string)
      raptor_free_memory(uri_string);
  }

However in raptor_uri.c, function raptor_uri_filename_to_uri_string,
line 571, you can see we do not check the string length

#ifdef WIN32
  if(filename[1] == ':' && filename[2] != '\\') // Memory overrun here!
    len+=3; /* relative filename - add / and ./ */
  else if(*filename == '\\')
    len-=2; /* two // from not needed in filename */
  else
    len++; /* / at start of path */
#else

I guess a calling an strlen() would do the trick, but I am not sure it
would be so efficient:
  if( (strlen(filename) >= 3) && filename[1] == ':' && filename[2] !=
'\\')

Aymeric


This email was sent to you by Thomson Reuters, the global news and information 
company.
Any views expressed in this message are those of the individual sender, except 
where the sender specifically states them to be the views of Thomson Reuters.


_______________________________________________
redland-dev mailing list
[email protected]
http://lists.librdf.org/mailman/listinfo/redland-dev

Reply via email to