I'm getting a crash in gimp when trying the Outline tutorial from http://www.obscurasite.com/artstuff/tutorials/gimp-text-outline/ When doing the Edit Stroke command : (brush selected circle 3). /usr2/gimp/bin/gimp: fatal error: sigbus caught /usr2/gimp/bin/gimp (pid:1152): [E]xit, [H]alt, show [S]tack trace or [P]roceed: fg /usr2/gimp/bin/gimp S #0 0xfef8a35c in g_on_error_stack_trace () #1 0xfef8a16c in g_on_error_query () #2 0xba3a0 in gimp_fatal_error () #3 0x1576a8 in on_signal () #4 <signal handler called> #5 0x177858 in color_pixels () #6 0x18ceb0 in paintbrush_motion () #7 0x18d2d8 in paintbrush_non_gui_paint_func () #8 0x18d524 in paintbrush_non_gui_default () #9 0x1eca54 in paintbrush_default_invoker () #10 0x1b8778 in procedural_db_execute () #11 0x1b8c04 in procedural_db_run_proc () #12 0xdadc8 in gimage_mask_stroke () #13 0x8a7bc in edit_stroke_cmd_callback () #14 0xff1c1724 in gtk_item_factory_callback_marshal () #15 0xff1e9160 in gtk_marshal_NONE__NONE () #16 0xff260228 in gtk_handlers_run () #17 0xff25e38c in gtk_signal_real_emit () #18 0xff2595bc in gtk_signal_emit () #19 0xff2e08d8 in gtk_widget_activate () #20 0xff1fcce0 in gtk_menu_shell_activate_item () #21 0xff1fa8dc in gtk_menu_shell_button_release () #22 0xff1e8730 in gtk_marshal_BOOL__POINTER () #23 0xff25e434 in gtk_signal_real_emit () #24 0xff2595bc in gtk_signal_emit () #25 0xff2e04d8 in gtk_widget_event () #26 0xff1e83fc in gtk_propagate_event () #27 0xff1e5f48 in gtk_main_do_event () #28 0xff02c9b0 in gdk_event_dispatch () #29 0xfef945dc in g_main_dispatch () #30 0xfef953d0 in g_main_iterate () #31 0xfef9576c in g_main_run () #32 0xff1e4eb4 in gtk_main () #33 0x157550 in main () Under the debugger : (dbx) cont signal BUS (invalid address alignment) in color_pixels at 0x177858 color_pixels+0x110: ld [%l0], %i1 (dbx) where =>[1] color_pixels(0x847bb0, 0xffbedbb2, 0x19, 0x4, 0x0, 0x0), at 0x177858 [2] paintbrush_motion(0x329110, 0x7bf940, 0x287758, 0x0, 0x0, 0x0), at 0x18cea8 [3] paintbrush_non_gui_paint_func(0x329110, 0x7bf940, 0x0, 0x0, 0x4052c000, 0x0), at 0x18d2d0 [4] paintbrush_non_gui_default(0x7bf940, 0x52, 0x8d5cb8, 0x0, 0x0, 0x0), at 0x18d51c [5] paintbrush_default_invoker(0x847b18, 0x2bfea8, 0xfed36000, 0x23c0, 0x21dc0, 0xfecc0d48), at 0x1eca4c [6] procedural_db_execute(0x2bfea8, 0x847b18, 0x0, 0x0, 0x0, 0x8d25f0), at 0x1b8770 [7] procedural_db_run_proc(0x2bfea8, 0xffbedf0c, 0x10, 0x3, 0x0, 0xa4), at 0x1b8bfc [8] gimage_mask_stroke(0x70d6b0, 0x7bf940, 0x1, 0x0, 0x20478, 0x5f85c0), at 0xdadc0 [9] edit_stroke_cmd_callback(0x5fd140, 0x0, 0x0, 0x0, 0x0, 0x0), at 0x8a7b4 [10] gtk_item_factory_callback_marshal(0x5fd140, 0x5ed940, 0x0, 0x0, 0x0, 0x5fb060), at 0xff1c171c [11] gtk_marshal_NONE__NONE(0x5fd140, 0xff1c1658, 0x5ed940, 0xffbee218, 0x214e0, 0xfee9b410), at 0xff1e9158 [12] gtk_handlers_run(0x5fcf50, 0xffbee184, 0x5fd140, 0xffbee218, 0x0, 0xffbee510), at 0xff260220 [13] gtk_signal_real_emit(0x5fd140, 0x5b, 0xffbee218, 0x1, 0x0, 0xffbee218), at 0xff25e384 [14] gtk_signal_emit(0x5fd140, 0x5b, 0x0, 0xffbeece4, 0x20, 0x330fd0), at 0xff2595b4 [15] gtk_widget_activate(0x5fd140, 0x5f59c0, 0x330ff0, 0x330fd0, 0x32d458, 0x0), at 0xff2e08d0 [16] gtk_menu_shell_activate_item(0x5f9970, 0x5fd140, 0x1, 0x0, 0x20478, 0x5f85c0), at 0xff1fccd8 [17] gtk_menu_shell_button_release(0x5f9970, 0x3c0de8, 0x0, 0x74b610, 0x0, 0x6a4735), at 0xff1fa8d4 [18] gtk_marshal_BOOL__POINTER(0x5f9970, 0xff1fa4a8, 0x0, 0xffbee820, 0x0, 0x0), at 0xff1e8728 [19] gtk_signal_real_emit(0x5f9970, 0x15, 0xffbee820, 0x0, 0x0, 0xffbee838), at 0xff25e42c [20] gtk_signal_emit(0x5f9970, 0x15, 0x3c0de8, 0xffbeeba0, 0x0, 0xfeea6134), at 0xff2595b4 [21] gtk_widget_event(0x5f9970, 0x3c0de8, 0x0, 0x8, 0x0, 0x7c00462), at 0xff2e04d0 [22] gtk_propagate_event(0x5fd140, 0x3c0de8, 0x32d458, 0xffbeece4, 0x20, 0x330fd0), at 0xff1e83f4 [23] gtk_main_do_event(0x3c0de8, 0x0, 0x330ff0, 0x330fd0, 0x32d458, 0x0), at 0xff1e5f40 [24] gdk_event_dispatch(0x0, 0xffbeee48, 0x0, 0x0, 0x20478, 0xfef95d2c), at 0xff02c9a8 [25] g_main_dispatch(0xffbeee48, 0x3328f0, 0x1, 0x74b610, 0x0, 0x6a4735), at 0xfef945d4 [26] g_main_iterate(0x1, 0x1, 0x0, 0x0, 0x0, 0x0), at 0xfef953c8 [27] g_main_run(0x6a4730, 0x6a4730, 0x0, 0x0, 0x0, 0x0), at 0xfef95764 [28] gtk_main(0x0, 0x6, 0x1575b0, 0x0, 0x33b548, 0x3305a0), at 0xff1e4eac [29] main(0x1, 0xffbef024, 0xffbef02c, 0x26fc00, 0x0, 0x0), at 0x157548 The comment in the code is rather explicit !!! It crashes. void color_pixels (unsigned char *dest, const unsigned char *color, int w, int bytes) { /* dest % bytes and color % bytes must be 0 or we will crash when bytes = 2 or 4. Is this safe to assume? Lets find out. This is 4-7X as fast as the simple version. */ register unsigned char c0, c1, c2; register guint32 *longd, longc; register guint16 *shortd, shortc; switch (bytes) { case 1: memset(dest, *color, w); break; case 2: shortc = ((guint16 *)color)[0]; shortd = (guint16 *)dest; while (w--) { *shortd = shortc; shortd++; } break; case 3: c0 = color[0]; c1 = color[1]; c2 = color[2]; while (w--) { dest[0] = c0; dest[1] = c1; dest[2] = c2; dest += 3; } break; case 4: longc = ((guint32 *)color)[0]; <<<< Crash here ! longd = (guint32 *)dest; while (w--) { *longd = longc; longd++; } break; default: { int b; while (w--) { for (b = 0; b < bytes; b++) dest[b] = color[b]; dest += bytes; } } } } -- Ludovic Poitou Sun Microsystems Inc. iPlanet E-Commerce Solutions - Directory Group - Grenoble - France