Also, more on the point, we have our own memory management system called wmem 
in which you allocate stuff within a scope and Wireshark handles freeing up the 
memory. 

Look for a README.wmem underneath /doc as well as the Wireshark developer guide 
for usage and the examples

Cheers
Roland

> Am 24.12.2022 um 07:40 schrieb Guy Harris <ghar...@sonic.net>:
> 
> On Dec 23, 2022, at 4:17 PM, <jayrturne...@gmail.com> 
> <jayrturne...@gmail.com> wrote:
> 
>> I run Wireshark 4.1.0 with my plugin dissector. It runs well, dissects 
>> packets, reports issues, and behaves as expected. I can load a capture file, 
>> that has packets of my protocol, exit Wireshark, and get no output to the 
>> command line. I can load another capture file, that has packets of my 
>> protocol, and get many many errors like:
>> ** (wireshark:nnnnn) hh:mm:ss.fffffff [GLib CRITICAL] -- g_string_free: 
>> assertion 'string != NULL' failed
>> where:
>>    • nnnnn is always the same number within a single run of Wireshark, and 
>> changes from run to run.
> 
> It's the process ID of the process running Wireshark.
> 
>>    • The timestamps can be 0.01 to 0.03 seconds apart and give me more than 
>> 60 in a second.
> 
> The code that's trying to free something "pointed to" by a null pointer is 
> being executed many times within a second.
> 
>>    • The list is output whenever I run a display filter or clear the display 
>> filter.
> 
> The packets are redirected when that happens, so it's probably happening 
> within a dissector.
> 
>>    • The list seems to be the same size whether the filter returns all 
>> packets, or some, or even two.
> 
> When a display filter is applied, it's applied to *all* packets.
> 
>> Maybe it is getting this error in my dissector or in another one.
> 
> Almost certainly.  My guess is that it's your dissector; what happens if you 
> remove your dissector?
> 
>> Is the error saying that it is trying to free a non-null string that has 
>> already been freed?
> 
> The beginning of g_string_free() is
> 
>    gchar *
>    g_string_free (GString  *string,
>                   gboolean  free_segment)
>    {
>      gchar *segment; 
> 
>      g_return_val_if_fail (string != NULL, NULL);
> 
> and the g_return_val_if_fail() call is what's failing.
> 
>> In any event, are there any recommendations for trying to locate this error?
> 
> Look for all places in your code where you're calling g_string_free() and 
> make sure they can't be called with a null pointer.
> ___________________________________________________________________________
> Sent via:    Wireshark-dev mailing list <wireshark-dev@wireshark.org>
> Archives:    https://www.wireshark.org/lists/wireshark-dev
> Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev
>             mailto:wireshark-dev-requ...@wireshark.org?subject=unsubscribe
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev@wireshark.org>
Archives:    https://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-requ...@wireshark.org?subject=unsubscribe

Reply via email to