[vlc-commits] [Git][videolan/vlc][master] memstream: reset ptr on vlc_memstream_close() error

Steve Lhomme (@robUx4) gitlab at videolan.org
Tue Nov 28 07:25:34 UTC 2023



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
e957881f by Steve Lhomme at 2023-11-28T06:59:37+00:00
memstream: reset ptr on vlc_memstream_close() error

It's easier to spot of NULL pointer dereference than a use after free.

In the POSIX implementation [1] the status of the pointer is undefined on
error. In our implementation it's free'd.

In both cases it's better some to use that pointer value after exiting
vlc_memstream_close().

[1] https://pubs.opengroup.org/onlinepubs/9699919799/functions/open_memstream.html

- - - - -


1 changed file:

- src/text/memstream.c


Changes:

=====================================
src/text/memstream.c
=====================================
@@ -49,17 +49,26 @@ int vlc_memstream_close(struct vlc_memstream *ms)
     int ret;
 
     if (unlikely(stream == NULL))
+    {
+        // was never properly opened
+        ms->ptr = NULL;
         return EOF;
+    }
 
     ms->stream = NULL;
     ret = ferror(stream);
 
     if (fclose(stream))
+    {
+        // assuming it's free'd by the memstream
+        ms->ptr = NULL;
         return EOF;
+    }
 
     if (unlikely(ret))
     {
         free(ms->ptr);
+        ms->ptr = NULL;
         return EOF;
     }
     return 0;
@@ -123,7 +132,10 @@ int vlc_memstream_flush(struct vlc_memstream *ms)
 int vlc_memstream_close(struct vlc_memstream *ms)
 {
     if (ms->error)
+    {
         free(ms->ptr);
+        ms->ptr = NULL;
+    }
     return ms->error;
 } 
 



View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/e957881f713b057b3841a44ec023c404544748d7

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/e957881f713b057b3841a44ec023c404544748d7
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list