Activity log for bug #1728360

Date Who What changed Old value New value Message
2017-10-29 09:25:56 Martin Rosenau bug added bug
2017-10-29 09:27:36 Martin Rosenau description Symptom: When selecting a part of the image and performing Edit -> Copy gnome-paint crashes with SIGSEGV. Analysis of the disassembly: If a C function is not declared (e.g. in an #include file) the compilers assume the function returns a 32-bit integer. Some other (64-bit) compilers seem to assume a 64-bit return value. The function "gp_selection_get_pixbuf()" is used by the function "Edit -> Copy" but it is not declared in any #include file (nor in the .c file where it is used). The function returns a pointer (64-bit). The compiler which was used to compile the binaries distributed with Ubuntu 17.10 seem to be one of the compilers assuming a signed 32-bit integer. Therefore the compiler will sign-extend the value returned by "gp_selection_get_pixbuf()" to 64 bits (instead of using the 64-bit pointer)! The result will be an invalid pointer and therefore a SIGSEGV when this pointer is used. Disassembly for reference: 18dc0 <on_menu_copy_activate@@Base>: 18dc0: 55 push %rbp 18dc1: 53 push %rbx ... 18e55: 48 89 c5 mov %rax,%rbp 18e58: 31 c0 xor %eax,%eax 18e5a: e8 51 1a 00 00 callq 1a8b0 <gp_selection_get_pixbuf@@Base> 18e5f: 48 89 ee mov %rbp,%rsi # This line must be "mov %eax,%rdi" (48 89 C7): 18e62: 48 63 f8 movslq %eax,%rdi 18e65: e8 b6 23 ff ff callq b220 <g_type_check_instance_cast@plt> ... To check if this is really the problem I replaced the bytes 0x63 F8 by the bytes 0x89 C7 in the file /usr/bin/gnome-paint using a hex-editor. Result: After this patch Edit -> Copy works without problems. A really correct solution was to add the function "gp_selection_get_pixbuf()" to a header file and to re-compile. Symptom: When selecting a part of the image and performing Edit -> Copy gnome-paint crashes with SIGSEGV. Analysis of the disassembly: If a C function is not declared (e.g. in an #include file) many compilers assume the function returns a 32-bit integer. Some other (64-bit) compilers seem to assume a 64-bit return value. The function "gp_selection_get_pixbuf()" is used by the function "Edit -> Copy" but it is not declared in any #include file (nor in the .c file where it is used). The function returns a pointer (64-bit). The compiler which was used to compile the binaries distributed with Ubuntu 17.10 seem to be one of the compilers assuming a signed 32-bit integer. Therefore the compiler will sign-extend the value returned by "gp_selection_get_pixbuf()" to 64 bits (instead of using the 64-bit pointer)! The result will be an invalid pointer and therefore a SIGSEGV when this pointer is used. Disassembly for reference:     18dc0 <on_menu_copy_activate@@Base>:        18dc0: 55 push %rbp        18dc1: 53 push %rbx        ...        18e55: 48 89 c5 mov %rax,%rbp        18e58: 31 c0 xor %eax,%eax        18e5a: e8 51 1a 00 00 callq 1a8b0 <gp_selection_get_pixbuf@@Base>        18e5f: 48 89 ee mov %rbp,%rsi        # This line must be "mov %eax,%rdi" (48 89 C7):        18e62: 48 63 f8 movslq %eax,%rdi        18e65: e8 b6 23 ff ff callq b220 <g_type_check_instance_cast@plt>        ... To check if this is really the problem I replaced the bytes 0x63 F8 by the bytes 0x89 C7 in the file /usr/bin/gnome-paint using a hex-editor. Result: After this patch Edit -> Copy works without problems. A really correct solution was to add the function "gp_selection_get_pixbuf()" to a header file and to re-compile.
2017-10-29 09:28:59 Martin Rosenau description Symptom: When selecting a part of the image and performing Edit -> Copy gnome-paint crashes with SIGSEGV. Analysis of the disassembly: If a C function is not declared (e.g. in an #include file) many compilers assume the function returns a 32-bit integer. Some other (64-bit) compilers seem to assume a 64-bit return value. The function "gp_selection_get_pixbuf()" is used by the function "Edit -> Copy" but it is not declared in any #include file (nor in the .c file where it is used). The function returns a pointer (64-bit). The compiler which was used to compile the binaries distributed with Ubuntu 17.10 seem to be one of the compilers assuming a signed 32-bit integer. Therefore the compiler will sign-extend the value returned by "gp_selection_get_pixbuf()" to 64 bits (instead of using the 64-bit pointer)! The result will be an invalid pointer and therefore a SIGSEGV when this pointer is used. Disassembly for reference:     18dc0 <on_menu_copy_activate@@Base>:        18dc0: 55 push %rbp        18dc1: 53 push %rbx        ...        18e55: 48 89 c5 mov %rax,%rbp        18e58: 31 c0 xor %eax,%eax        18e5a: e8 51 1a 00 00 callq 1a8b0 <gp_selection_get_pixbuf@@Base>        18e5f: 48 89 ee mov %rbp,%rsi        # This line must be "mov %eax,%rdi" (48 89 C7):        18e62: 48 63 f8 movslq %eax,%rdi        18e65: e8 b6 23 ff ff callq b220 <g_type_check_instance_cast@plt>        ... To check if this is really the problem I replaced the bytes 0x63 F8 by the bytes 0x89 C7 in the file /usr/bin/gnome-paint using a hex-editor. Result: After this patch Edit -> Copy works without problems. A really correct solution was to add the function "gp_selection_get_pixbuf()" to a header file and to re-compile. Symptom: When selecting a part of the image and performing Edit -> Copy gnome-paint crashes with SIGSEGV. Analysis of the disassembly: If a C function is not declared (e.g. in an #include file) many compilers assume the function returns a 32-bit integer. Some other (64-bit) compilers seem to assume a 64-bit return value. The function "gp_selection_get_pixbuf()" is used by the function "Edit -> Copy" but it is not declared in any #include file (nor in the .c file where it is used). The function returns a pointer (64-bit). The compiler which was used to compile the binaries distributed with Ubuntu 17.10 seem to be one of the compilers assuming a signed 32-bit integer. Therefore the compiler will sign-extend the value returned by "gp_selection_get_pixbuf()" to 64 bits (instead of using the 64-bit pointer)! The result will be an invalid pointer and therefore a SIGSEGV when this pointer is used. Disassembly for reference:     18dc0 <on_menu_copy_activate@@Base>:        18dc0: 55 : push %rbp        18dc1: 53 : push %rbx        ...        18e55: 48 89 c5 : mov %rax,%rbp        18e58: 31 c0 : xor %eax,%eax        18e5a: e8 51 1a 00 00 : callq <gp_selection_get_pixbuf@@Base>        18e5f: 48 89 ee : mov %rbp,%rsi        # This line must be "mov %eax,%rdi" (48 89 C7):        18e62: 48 63 f8 : movslq %eax,%rdi        18e65: e8 b6 23 ff ff : callq <g_type_check_instance_cast@plt>        ... To check if this is really the problem I replaced the bytes 0x63 F8 by the bytes 0x89 C7 in the file /usr/bin/gnome-paint using a hex-editor. Result: After this patch Edit -> Copy works without problems. A really correct solution was to add the function "gp_selection_get_pixbuf()" to a header file and to re-compile.
2017-10-29 09:30:07 Martin Rosenau description Symptom: When selecting a part of the image and performing Edit -> Copy gnome-paint crashes with SIGSEGV. Analysis of the disassembly: If a C function is not declared (e.g. in an #include file) many compilers assume the function returns a 32-bit integer. Some other (64-bit) compilers seem to assume a 64-bit return value. The function "gp_selection_get_pixbuf()" is used by the function "Edit -> Copy" but it is not declared in any #include file (nor in the .c file where it is used). The function returns a pointer (64-bit). The compiler which was used to compile the binaries distributed with Ubuntu 17.10 seem to be one of the compilers assuming a signed 32-bit integer. Therefore the compiler will sign-extend the value returned by "gp_selection_get_pixbuf()" to 64 bits (instead of using the 64-bit pointer)! The result will be an invalid pointer and therefore a SIGSEGV when this pointer is used. Disassembly for reference:     18dc0 <on_menu_copy_activate@@Base>:        18dc0: 55 : push %rbp        18dc1: 53 : push %rbx        ...        18e55: 48 89 c5 : mov %rax,%rbp        18e58: 31 c0 : xor %eax,%eax        18e5a: e8 51 1a 00 00 : callq <gp_selection_get_pixbuf@@Base>        18e5f: 48 89 ee : mov %rbp,%rsi        # This line must be "mov %eax,%rdi" (48 89 C7):        18e62: 48 63 f8 : movslq %eax,%rdi        18e65: e8 b6 23 ff ff : callq <g_type_check_instance_cast@plt>        ... To check if this is really the problem I replaced the bytes 0x63 F8 by the bytes 0x89 C7 in the file /usr/bin/gnome-paint using a hex-editor. Result: After this patch Edit -> Copy works without problems. A really correct solution was to add the function "gp_selection_get_pixbuf()" to a header file and to re-compile. Symptom: When selecting a part of the image and performing Edit -> Copy gnome-paint crashes with SIGSEGV. Analysis of the disassembly: If a C function is not declared (e.g. in an #include file) many compilers assume the function returns a 32-bit integer. Some other (64-bit) compilers seem to assume a 64-bit return value. The function "gp_selection_get_pixbuf()" is used by the function "Edit -> Copy" but it is not declared in any #include file (nor in the .c file where it is used). The function returns a pointer (64-bit). The compiler which was used to compile the binaries distributed with Ubuntu 17.10 seem to be one of the compilers assuming a signed 32-bit integer. Therefore the compiler will sign-extend the value returned by "gp_selection_get_pixbuf()" to 64 bits (instead of using the 64-bit pointer)! The result will be an invalid pointer and therefore a SIGSEGV when this pointer is used. Disassembly for reference:     18dc0 <on_menu_copy_activate@@Base>:        18dc0: 55 : push %rbp        18dc1: 53 : push %rbx        ...        18e55: 48 89 c5 : mov %rax,%rbp        18e58: 31 c0 : xor %eax,%eax        18e5a: e8 51 1a 00 00 : callq <gp_selection_get_pixbuf@@Base>        18e5f: 48 89 ee : mov %rbp,%rsi        # This line must be "mov %eax,%rdi" (48 89 C7):        18e62: 48 63 f8 : movslq %eax,%rdi        18e65: e8 b6 23 ff ff : callq <g_type_check_instance_cast@plt>        ... To check if this is really the problem I replaced the bytes 0x63 F8 by the bytes 0x89 C7 in the file /usr/bin/gnome-paint using a hex-editor. Result: After this patch Edit -> Copy works without problems. A really correct solution would be adding the function "gp_selection_get_pixbuf()" to a header file and re-compiling.