Please find attached my gdb protocol -- may be something would come useful. Issue still exists in current sid (0.92.0 of wmaker), and wmsetbg pukes on default backgrounds of awesome (but I guess it works for others well... may be it is architecture dependent ? mine is amd64): /usr/share/awesome/themes/default/background.png: PNG image, 1920 x 1200, 8-bit/color RGBA, non-interlaced
wmsetbg doesn't puke on other images though, such as /home/yoh/.config/awesome/hotbrain.png: PNG image, 1680 x 1050, 8-bit/color RGB, non-interlaced (made it RGBA -- also didn't puke) -- .-. =------------------------------ /v\ ----------------------------= Keep in touch // \\ (yoh@|www.)onerussian.com Yaroslav Halchenko /( )\ ICQ#: 60653192 Linux User ^^-^^ [175555]
(gdb) set args -s -S /usr/share/awesome/themes/default/background.png (gdb) r Starting program: /usr/bin/wmsetbg -s -S /usr/share/awesome/themes/default/background.png [Thread debugging using libthread_db enabled] [New Thread 0x7fe738b2d6f0 (LWP 7124)] Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7fe738b2d6f0 (LWP 7124)] 0x00007fe73873c790 in RLoadPNG (context=0x1ee3580, file=0x1ee3990 "/usr/share/awesome/themes/default/background.png", index=0) at /tmp/wmaker-0.92.0/wrlib/png.c:197 197 png_rows[y] = alloca(png_get_rowbytes(png, pinfo)); (gdb) bt #0 0x00007fe73873c790 in RLoadPNG (context=0x1ee3580, file=0x1ee3990 "/usr/share/awesome/themes/default/background.png", index=0) at /tmp/wmaker-0.92.0/wrlib/png.c:197 #1 0x00007fe73872e379 in RLoadImage (context=0x1ee3580, file=0x1ee3990 "/usr/share/awesome/themes/default/background.png", index=0) at /tmp/wmaker-0.92.0/wrlib/load.c:217 #2 0x0000000000402cae in loadImage (rc=0x1ee3580, file=0x1ee38f0 "/usr/share/awesome/themes/default/background.png") at /tmp/wmaker-0.92.0/util/wmsetbg.c:172 #3 0x0000000000403d74 in parseTexture (rc=0x1ee3580, text=0x7fff40b5a550 "(spixmap, \"/usr/share/awesome/themes/default/background.png\", gray20)") at /tmp/wmaker-0.92.0/util/wmsetbg.c:509 #4 0x000000000040684f in main (argc=4, argv=0x7fff40b5b6c8) at /tmp/wmaker-0.92.0/util/wmsetbg.c:1556 (gdb) bt full #0 0x00007fe73873c790 in RLoadPNG (context=0x1ee3580, file=0x1ee3990 "/usr/share/awesome/themes/default/background.png", index=0) at /tmp/wmaker-0.92.0/wrlib/png.c:197 tmp = 0x0 image = (RImage *) 0x1ee45e0 f = (FILE *) 0x1ee3ae0 png = (png_structp) 0x1ee3d20 pinfo = (png_infop) 0x1ee4220 einfo = (png_infop) 0x1ee4400 bkcolor = (png_color_16p) 0x7fe738b344c8 alpha = 4 x = 0 y = 1087 i = 0 gamma = 5.292397776572611e-260 sgamma = 2.2000000000000002 width = 1920 height = 1200 depth = 8 junk = 0 color_type = 6 png_rows = (png_bytep *) 0x7fff40b57b40 ptr = (unsigned char *) 0x2 <Address 0x2 out of bounds> #1 0x00007fe73872e379 in RLoadImage (context=0x1ee3580, file=0x1ee3990 "/usr/share/awesome/themes/default/background.png", index=0) at /tmp/wmaker-0.92.0/wrlib/load.c:217 image = (RImage *) 0x0 i = 8 st = {st_dev = 32, st_ino = 6382688, st_nlink = 4205040, st_mode = 1085650624, st_uid = 32767, st_gid = 0, __pad0 = 0, st_rdev = 0, st_size = 0, st_blksize = 140631063454346, st_blocks = 140733193388033, st_atim = {tv_sec = 0, tv_nsec = 0}, st_mtim = {tv_sec = 140631046228184, tv_nsec = 140631061186392}, st_ctim = {tv_sec = 4267040, tv_nsec = 140734279033568}, __unused = {140631063478690, 32389520, 0}} __PRETTY_FUNCTION__ = "RLoadImage" #2 0x0000000000402cae in loadImage (rc=0x1ee3580, file=0x1ee38f0 "/usr/share/awesome/themes/default/background.png") at /tmp/wmaker-0.92.0/util/wmsetbg.c:172 path = 0x1ee3990 "/usr/share/awesome/themes/default/background.png" image = (RImage *) 0x1ee3820 #3 0x0000000000403d74 in parseTexture (rc=0x1ee3580, text=0x7fff40b5a550 "(spixmap, \"/usr/share/awesome/themes/default/background.png\", gray20)") at /tmp/wmaker-0.92.0/util/wmsetbg.c:509 color = {pixel = 18446744073709551615, red = 0, green = 0, blue = 0, flags = 0 '\0', pad = 0 '\0'} image = (RImage *) 0x0 pixmap = 0 iwidth = 4205040 iheight = 0 rcolor = {red = 255 '�', green = 255 '�', blue = 255 '�', alpha = 255 '�'} texture = (BackgroundTexture *) 0x1ee3950 texarray = (WMPropList *) 0x1ee3560 val = (WMPropList *) 0x1ee3820 count = 3 tmp = 0x1ee38f0 "/usr/share/awesome/themes/default/background.png" type = 0x1ee3890 "spixmap" #4 0x000000000040684f in main (argc=4, argv=0x7fff40b5b6c8) at /tmp/wmaker-0.92.0/util/wmsetbg.c:1556 tex = (BackgroundTexture *) 0x7fff40b5b6c0 buffer = "(spixmap, \"/usr/share/awesome/themes/default/background.png\", gray20)\000��\020\000\000\000\000\000\000\000\000�8�\177\000\000 �...@�\177\000\000\220��@�\177\000\000\000\000\000\000\000\000\000\000�\210\2067�\177\000\000\003\000\000\000\000\000\000\000xY�8�\177\000\000m�\2248�\177", '\0' <repeats 14 times>, "@\0008\000\000\000\000\000\000\000\000\0006�\2248�\177\000\000 �...@�\177\000\0000�\2248�\177\000\000_��@�\177\000\000P��@"... i = 4 helperMode = 0 rc = (RContext *) 0x1ee3580 rattr = {flags = 163, render_mode = 0, colors_per_channel = 4, rgamma = 0, ggamma = 1.40129846e-44, bgamma = 0, visualid = 32768, use_shared_memory = 4, scaling_filter = 0, standard_colormap_mode = 1} style = 0x411ec4 "spixmap" back_color = 0x4125a9 "gray20" image_name = 0x7fff40b5cfab "/usr/share/awesome/themes/default/background.png" domain = 0x41259d "WindowMaker" update = 0 cpc = 4 render_mode = 0 obey_user = 0 texture = 0x7fff40b5a550 "(spixmap, \"/usr/share/awesome/themes/default/background.png\", gray20)" workspace = -1 (gdb) p pinfo $2 = (png_infop) 0x1ee4220 *(gdb) p *pinfo $3 = {width = 1920, height = 1200, valid = 130, rowbytes = 7680, palette = 0x0, num_palette = 0, num_trans = 0, bit_depth = 8 '\b', color_type = 6 '\006', compression_type = 0 '\0', filter_type = 0 '\0', interlace_type = 0 '\0', channels = 4 '\004', pixel_depth = 32 ' ', spare_byte = 0 '\0', signature = "\211PNG\r\n\032\n", gamma = 0.449999988, srgb_intent = 0 '\0', num_text = 1, max_text = 9, text = 0x1ee4610, mod_time = {year = 0, month = 0 '\0', day = 0 '\0', hour = 0 '\0', minute = 0 '\0', second = 0 '\0'}, sig_bit = {red = 8 '\b', green = 8 '\b', blue = 8 '\b', gray = 0 '\0', alpha = 8 '\b'}, trans = 0x0, trans_values = {index = 0 '\0', red = 0, green = 0, blue = 0, gray = 0}, background = {index = 0 '\0', red = 0, green = 0, blue = 0, gray = 0}, x_offset = 0, y_offset = 0, offset_unit_type = 0 '\0', x_pixels_per_unit = 3543, y_pixels_per_unit = 3543, phys_unit_type = 1 '\001', hist = 0x0, x_white = 0, y_white = 0, x_red = 0, y_red = 0, x_green = 0, y_green = 0, x_blue = 0, y_blue = 0, pcal_purpose = 0x0, pcal_X0 = 0, pcal_X1 = 0, pcal_units = 0x0, pcal_params = 0x0, pcal_type = 0 '\0', pcal_nparams = 0 '\0', free_me = 16384, unknown_chunks = 0x0, unknown_chunks_num = 0, iccp_name = 0x0, iccp_profile = 0x0, iccp_proflen = 0, iccp_compression = 0 '\0', splt_palettes = 0x0, splt_palettes_num = 0, scal_unit = 0 '\0', scal_pixel_width = 0, scal_pixel_height = 0, scal_s_width = 0x0, scal_s_height = 0x0, row_pointers = 0x0, int_gamma = 0, int_x_white = 0, int_y_white = 0, int_x_red = 0, int_y_red = 0, int_x_green = 0, int_y_green = 0, int_x_blue = 0, int_y_blue = 0} (gdb) call png_get_rowbytes(png, pinfo) Cannot access memory at address 0x7fff4035d4a8 (gdb) l 192 alloca(0); 193 #endif 194 return NULL; 195 } 196 for (y=0; y<height; y++) { 197 png_rows[y] = alloca(png_get_rowbytes(png, pinfo)); 198 if (!png_rows[y]) { 199 RErrorCode = RERR_NOMEMORY; 200 fclose(f); 201 RReleaseImage(image); (gdb) print y $8 = 1087 (gdb) p height $9 = 1200 (gdb) p png $4 = (png_structp) 0x1ee3d20 (gdb) p *png $5 = {jmpbuf = {{__jmpbuf = {4267040, 2117168273360134567, 4205040, 140734279038656, 0, 0, 2117168273328677287, 2112541026912412071}, __mask_was_saved = 0, __saved_mask = {__val = {0 <repeats 16 times>}}}}, error_fn = 0, warning_fn = 0, error_ptr = 0x0, write_data_fn = 0, read_data_fn = 0x7fe7371eae90, io_ptr = 0x1ee3ae0, read_user_transform_fn = 0, write_user_transform_fn = 0, user_transform_ptr = 0x0, user_transform_depth = 0 '\0', user_transform_channels = 0 '\0', mode = 4101, flags = 64, transformations = 8192, zstream = {next_in = 0x0, avail_in = 0, total_in = 0, next_out = 0x1ee67e0 "gray20", avail_out = 8192, total_out = 0, msg = 0x0, state = 0x1ee87f0, zalloc = 0x7fe7371dd450, zfree = 0x7fe7371dd5e0, opaque = 0x1ee3d20, data_type = 0, adler = 1, reserved = 0}, zbuf = 0x1ee67e0 "gray20", zbuf_size = 8192, zlib_level = 0, zlib_method = 0, zlib_window_bits = 0, zlib_mem_level = 0, zlib_strategy = 0, width = 1920, height = 1200, num_rows = 1200, usr_width = 0, rowbytes = 7680, irowbytes = 7681, iwidth = 1920, row_number = 0, prev_row = 0x1eecba0 "", row_buf = 0x1eead70 "", sub_row = 0x0, up_row = 0x0, avg_row = 0x0, paeth_row = 0x0, row_info = {width = 0, rowbytes = 0, color_type = 0 '\0', bit_depth = 0 '\0', channels = 0 '\0', pixel_depth = 0 '\0'}, idat_size = 43655, crc = 900662814, palette = 0x0, num_palette = 0, num_trans = 0, chunk_name = "IDAT", compression = 0 '\0', filter = 0 '\0', interlaced = 0 '\0', pass = 0 '\0', do_filter = 0 '\0', color_type = 6 '\006', bit_depth = 8 '\b', usr_bit_depth = 0 '\0', pixel_depth = 32 ' ', channels = 4 '\004', usr_channels = 0 '\0', sig_bytes = 8 '\b', filler = 0, background_gamma_type = 0 '\0', background_gamma = 0, background = {index = 0 '\0', red = 0, green = 0, blue = 0, gray = 0}, background_1 = {index = 0 '\0', red = 0, green = 0, blue = 0, gray = 0}, output_flush_fn = 0, flush_dist = 0, flush_rows = 0, gamma_shift = 0, gamma = 0.449999988, screen_gamma = 2.20000005, gamma_table = 0x1ee4770 "", gamma_from_1 = 0x0, gamma_to_1 = 0x0, gamma_16_table = 0x0, gamma_16_from_1 = 0x0, gamma_16_to_1 = 0x0, sig_bit = {red = 8 '\b', green = 8 '\b', blue = 8 '\b', gray = 0 '\0', alpha = 8 '\b'}, shift = {red = 0 '\0', green = 0 '\0', blue = 0 '\0', gray = 0 '\0', alpha = 0 '\0'}, trans = 0x0, trans_values = {index = 0 '\0', red = 0, green = 0, blue = 0, gray = 0}, read_row_fn = 0, write_row_fn = 0, info_fn = 0, row_fn = 0, end_fn = 0, save_buffer_ptr = 0x0, save_buffer = 0x0, current_buffer_ptr = 0x0, current_buffer = 0x0, push_length = 0, skip_length = 0, save_buffer_size = 0, save_buffer_max = 0, buffer_size = 0, current_buffer_size = 0, process_mode = 0, cur_palette = 0, current_text_size = 0, current_text_left = 0, current_text = 0x0, current_text_ptr = 0x0, palette_lookup = 0x0, dither_index = 0x0, hist = 0x0, heuristic_method = 0 '\0', num_prev_filters = 0 '\0', prev_filters = 0x0, filter_weights = 0x0, inv_filter_weights = 0x0, filter_costs = 0x0, inv_filter_costs = 0x0, time_buffer = 0x0, free_me = 0, user_chunk_ptr = 0x0, read_user_chunk_fn = 0, num_chunk_list = 0, chunk_list = 0x0, rgb_to_gray_status = 0 '\0', rgb_to_gray_red_coeff = 0, rgb_to_gray_green_coeff = 0, rgb_to_gray_blue_coeff = 0, mng_features_permitted = 0, int_gamma = 0, filter_type = 0 '\0', mmx_bitdepth_threshold = 0 '\0', mmx_rowbytes_threshold = 0, asm_flags = 0, mem_ptr = 0x0, malloc_fn = 0, free_fn = 0, big_row_buf = 0x1eead50 "", dither_sort = 0x0, index_to_palette = 0x0, palette_to_index = 0x0, compression_type = 0 '\0', user_width_max = 1000000, user_height_max = 1000000, unknown_chunk = {name = "\000\000\000\000", data = 0x0, size = 0, location = 0 '\0'}, old_big_row_buf_size = 7749, old_prev_row_size = 7681, chunkdata = 0x0} (gdb) p pinfo $6 = (png_infop) 0x1ee4220 (gdb) p *pinfo $7 = {width = 1920, height = 1200, valid = 130, rowbytes = 7680, palette = 0x0, num_palette = 0, num_trans = 0, bit_depth = 8 '\b', color_type = 6 '\006', compression_type = 0 '\0', filter_type = 0 '\0', interlace_type = 0 '\0', channels = 4 '\004', pixel_depth = 32 ' ', spare_byte = 0 '\0', signature = "\211PNG\r\n\032\n", gamma = 0.449999988, srgb_intent = 0 '\0', num_text = 1, max_text = 9, text = 0x1ee4610, mod_time = {year = 0, month = 0 '\0', day = 0 '\0', hour = 0 '\0', minute = 0 '\0', second = 0 '\0'}, sig_bit = {red = 8 '\b', green = 8 '\b', blue = 8 '\b', gray = 0 '\0', alpha = 8 '\b'}, trans = 0x0, trans_values = {index = 0 '\0', red = 0, green = 0, blue = 0, gray = 0}, background = {index = 0 '\0', red = 0, green = 0, blue = 0, gray = 0}, x_offset = 0, y_offset = 0, offset_unit_type = 0 '\0', x_pixels_per_unit = 3543, y_pixels_per_unit = 3543, phys_unit_type = 1 '\001', hist = 0x0, x_white = 0, y_white = 0, x_red = 0, y_red = 0, x_green = 0, y_green = 0, x_blue = 0, y_blue = 0, pcal_purpose = 0x0, pcal_X0 = 0, pcal_X1 = 0, pcal_units = 0x0, pcal_params = 0x0, pcal_type = 0 '\0', pcal_nparams = 0 '\0', free_me = 16384, unknown_chunks = 0x0, unknown_chunks_num = 0, iccp_name = 0x0, iccp_profile = 0x0, iccp_proflen = 0, iccp_compression = 0 '\0', splt_palettes = 0x0, splt_palettes_num = 0, scal_unit = 0 '\0', scal_pixel_width = 0, scal_pixel_height = 0, scal_s_width = 0x0, scal_s_height = 0x0, row_pointers = 0x0, int_gamma = 0, int_x_white = 0, int_y_white = 0, int_x_red = 0, int_y_red = 0, int_x_green = 0, int_y_green = 0, int_x_blue = 0, int_y_blue = 0} so, alloca seems to screw things up (gdb) display y 1: y = 1085 (gdb) call png_get_rowbytes(png, pinfo) $5 = 7680 (gdb) n 197 png_rows[y] = alloca(png_get_rowbytes(png, pinfo)); 1: y = 1086 (gdb) call png_get_rowbytes(png, pinfo) $6 = 7680 (gdb) n 198 if (!png_rows[y]) { 1: y = 1086 (gdb) call png_get_rowbytes(png, pinfo) Cannot access memory at address 0x7fff6ec9ede8 Valgrind just confirms access to freed memory ==8529== Process terminating with default action of signal 11 (SIGSEGV) ==8529== Access not within mapped region at address 0x7FE801918 ==8529== at 0x4E40790: RLoadPNG (png.c:197) ==8529== If you believe this happened as a result of a stack overflow in your ==8529== program's main thread (unlikely but possible), you can try to increase ==8529== the size of the main thread stack using the --main-stacksize= flag. ==8529== The main thread stack size used in this run was 8388608. ==8529== Stack overflow in thread 1: can't grow stack to 0x7fe801910 ==8529== ==8529== Process terminating with default action of signal 11 (SIGSEGV) ==8529== Access not within mapped region at address 0x7FE801910 ==8529== at 0x4A1E554: _vgnU_freeres (vg_preloaded.c:56) ==8529== If you believe this happened as a result of a stack overflow in your ==8529== program's main thread (unlikely but possible), you can try to increase ==8529== the size of the main thread stack using the --main-stacksize= flag. ==8529== The main thread stack size used in this run was 8388608.
signature.asc
Description: Digital signature