On 13-10-23 05:29 AM, n@sk0 wrote:
Before read : Keep in mind that i am *not* C/C++ "native" developer, and
all message below can be just rant.

After little testing and debugging, i found that :
In on_editor_notify() function, user_data is not a valid pointer :
on_editor_notify(GObject *obj, gint scn, SCNotification *nt, gpointer
user_data)
{
     AutocloseUserData *data = user_data;
     ...
}

After I playing for a while with this and reading demoplugin.c source, i
found that in the autoclose.c, PluginCallback[] (line:829) is missing
the definition for "editor-notify" event,so i added it, recompile plugin
and now all seems to work correctly.


It's connected on line 812 inside a callback for when the document is activated. There's a few problems with this; the data allocated on L810 is going to leak, once for each time a document is activated (has tab switched to). The other thing is the plugin_signal_connect() is going to stack up signal handlers, so if you activated a document, on_editor_notify is going to get called on every single scintilla notification (keypress, cursor blink, etc.), for every number of times that document was activated.

The final problem is that, as Lex mentioned, it's not checking `DOC_VALID()` (or doc->is_valid) but just that data->doc != NULL, so if any document that was ever activated is closed, this is going to explode when the document pointer is dereferenced (for reasons I never understood, Geany "recycles" documents, so it's entirely possible to have a document pointer that is neither NULL nor valid).

Cheers,
Matthew Brush

P.S.: I add the patch file as attachment to this mail, becouse for now i
do not have any expiriance in commiting patches on GitHub, but tonight i
will fix this big mistake :)

On 23/10/13 13:00, Lex Trotman wrote:

Looking at the line that failed, first guess would be failure to check
doc is valid before using it.

Cheers
Lex


On 23 October 2013 20:20, n@sk0 <arrted...@gmail.com
<mailto:arrted...@gmail.com>> wrote:

    There is strange behaviour when Auto-close plug-in is enabled.

    Steps to reproduce :
    1. open Geany
    2. Enable auto-close plug-in
    3. open several files for edit
    4. Click Ctrl+W (close document)
    --

    Expected result :
    Currently opened document is closed.
    --

    Actual result :
    Segmentation fault
    --

    See attached gdb backtrace for more info.

    Debug info :
    Geany-INFO: Geany 1.24 (git >= ef33175), en_US.UTF-8
    Geany-INFO: GTK 2.24.22, GLib 2.36.3
    Geany-INFO: System data dir: /usr/local/share/geany
    Geany-INFO: User config dir: /home/nask0/.config/geany
    Geany-INFO: System plugin path: /usr/local/lib/geany
    Geany-INFO: Added filetype CUDA (57).
    Geany-INFO: Added filetype Rust (58).
    Geany-INFO: Added filetype Scala (59).
    Geany-INFO: Added filetype Graphviz (60).
    Geany-INFO: Added filetype Cython (61).
    Geany-INFO: Added filetype Genie (62).
    Geany-INFO: Added filetype Clojure (63).
    Geany-INFO: Added filetype Go (64).
    Geany-INFO: Disabling terminal support
    Geany-INFO: Loaded:   /usr/local/lib/geany/addons.so (Addons)
    Geany-INFO: Loaded:   /usr/local/lib/geany/autoclose.so (Auto-close)
    Geany-INFO: Loaded:   /usr/local/lib/geany/geanylipsum.so
    (GeanyLipsum)
    Geany-INFO: Loaded:   /usr/local/lib/geany/geanyvc.so (GeanyVC)
    Geany-INFO: Loaded:   /usr/local/lib/geany/htmlchars.so (HTML
    Characters)
    Geany-INFO: Loaded:   /usr/local/lib/geany/geanyprj.so (Project)
    Geany-INFO: Loaded:   /usr/local/lib/geany/splitwindow.so (Split
    Window)
    Geany-INFO: Loaded:   /usr/local/lib/geany/treebrowser.so
    (TreeBrowser)
    Geany-INFO: Loaded:   /usr/local/lib/geany/xmlsnippets.so (XML
    Snippets)


    _______________________________________________
    Devel mailing list
    Devel@lists.geany.org <mailto:Devel@lists.geany.org>
    https://lists.geany.org/cgi-bin/mailman/listinfo/devel




_______________________________________________
Devel mailing list
Devel@lists.geany.org
https://lists.geany.org/cgi-bin/mailman/listinfo/devel




_______________________________________________
Devel mailing list
Devel@lists.geany.org
https://lists.geany.org/cgi-bin/mailman/listinfo/devel


_______________________________________________
Devel mailing list
Devel@lists.geany.org
https://lists.geany.org/cgi-bin/mailman/listinfo/devel

Reply via email to