Code Monkey home page Code Monkey logo

gppdf's Introduction

GFXprim

GFXprim is Open-source modular 2D bitmap graphics library with emphasis on speed and correctness. It comes batteries included, but free from bloat.

It includes:

  • Graphical user interface widgets with object hierarchy and declarative layouts.
  • Clean and non-intrusive implementations of elementary data structures.
  • Multiple rendering backends supporting desktop to embedded.
  • Integrations with many image loaders.
  • Image filters
  • Sample applications including image and PDF viewers.
  • Many tests

See http://gfxprim.ucw.cz for details.

gppdf's People

Contributors

metan-ucw avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

gppdf's Issues

gppdf from package segfaults on opening PDF

$ gppdf /tmp/file.pdf 
*** gfxprim: gp_blit.c:41: in gp_blit_xyxy: check failed: x2 + (x1 - x0) < (gp_coord) gp_pixmap_w(dst)
 

C stack trace (most recent call first):
/lib64/libgfxprim.so.1(gp_debug_print_cstack+0x1b)[0x7feab3773c4b]
/lib64/libgfxprim.so.1(gp_print_abort_info+0x103)[0x7feab3773da3]
/lib64/libgfxprim.so.1(gp_blit_xyxy+0xe8)[0x7feab3773798]
/lib64/libgfxprim-widgets.so.1(+0x1cda5)[0x7feab371dda5]
/lib64/libgfxprim-widgets.so.1(gp_widget_ops_render+0x123)[0x7feab371bc13]
/lib64/libgfxprim-widgets.so.1(+0x13bb0)[0x7feab3714bb0]
/lib64/libgfxprim-widgets.so.1(gp_widget_ops_render+0x123)[0x7feab371bc13]
/lib64/libgfxprim-widgets.so.1(gp_widget_render+0x83)[0x7feab371bf03]
/lib64/libgfxprim-widgets.so.1(gp_widgets_event+0x1e4)[0x7feab371f984]
/lib64/libgfxprim-widgets.so.1(gp_widgets_process_events+0x18)[0x7feab371fce8]
/lib64/libgfxprim-widgets.so.1(+0x1eef0)[0x7feab371fef0]
/lib64/libgfxprim.so.1(gp_fds_poll+0x8a)[0x7feab37fec6a]
/lib64/libgfxprim-widgets.so.1(gp_widgets_main_loop+0xbe)[0x7feab371fe6e]
./gppdf[0x4023f6]
/lib64/libc.so.6(+0x405b0)[0x7feab04405b0]
/lib64/libc.so.6(__libc_start_main+0x8b)[0x7feab0440679]
./gppdf(_start+0x25)[0x402425]
Aborted (core dumped)

$ strace ./gppdf /tmp/file.pdf
...
close(5)                                = 0
mprotect(0x7fe69aa97000, 4096, PROT_READ) = 0
munmap(0x7fe69a6f9000, 171807)          = 0
futex(0x7fe69aa98070, FUTEX_WAKE_PRIVATE, 2147483647) = 0
write(2, "\nC stack trace (most recent call"..., 41
C stack trace (most recent call first):
) = 41
writev(2, [{iov_base="/lib64/libgfxprim.so.1", iov_len=22}, {iov_base="(", iov_len=1}, {iov_base="gp_debug_print_cstack", iov_len=21}, {iov_base="+0x", iov_len=3}, {iov_base="1b", iov_len=2}, {iov_base=")", iov_len=1}, {iov_base="[0x", iov_len=3}, {iov_base="7fe69ec73c4b", iov_len=12}, {iov_base="]\n", iov_len=2}], 9/lib64/libgfxprim.so.1(gp_debug_print_cstack+0x1b)[0x7fe69ec73c4b]
) = 67
writev(2, [{iov_base="/lib64/libgfxprim.so.1", iov_len=22}, {iov_base="(", iov_len=1}, {iov_base="gp_print_abort_info", iov_len=19}, {iov_base="+0x", iov_len=3}, {iov_base="103", iov_len=3}, {iov_base=")", iov_len=1}, {iov_base="[0x", iov_len=3}, {iov_base="7fe69ec73da3", iov_len=12}, {iov_base="]\n", iov_len=2}], 9/lib64/libgfxprim.so.1(gp_print_abort_info+0x103)[0x7fe69ec73da3]
) = 66
writev(2, [{iov_base="/lib64/libgfxprim.so.1", iov_len=22}, {iov_base="(", iov_len=1}, {iov_base="gp_blit_xyxy", iov_len=12}, {iov_base="+0x", iov_len=3}, {iov_base="e8", iov_len=2}, {iov_base=")", iov_len=1}, {iov_base="[0x", iov_len=3}, {iov_base="7fe69ec73798", iov_len=12}, {iov_base="]\n", iov_len=2}], 9/lib64/libgfxprim.so.1(gp_blit_xyxy+0xe8)[0x7fe69ec73798]
) = 58
writev(2, [{iov_base="/lib64/libgfxprim-widgets.so.1", iov_len=30}, {iov_base="(", iov_len=1}, {iov_base="+0x", iov_len=3}, {iov_base="1cda5", iov_len=5}, {iov_base=")", iov_len=1}, {iov_base="[0x", iov_len=3}, {iov_base="7fe69ec1dda5", iov_len=12}, {iov_base="]\n", iov_len=2}], 8/lib64/libgfxprim-widgets.so.1(+0x1cda5)[0x7fe69ec1dda5]
) = 57
writev(2, [{iov_base="/lib64/libgfxprim-widgets.so.1", iov_len=30}, {iov_base="(", iov_len=1}, {iov_base="gp_widget_ops_render", iov_len=20}, {iov_base="+0x", iov_len=3}, {iov_base="123", iov_len=3}, {iov_base=")", iov_len=1}, {iov_base="[0x", iov_len=3}, {iov_base="7fe69ec1bc13", iov_len=12}, {iov_base="]\n", iov_len=2}], 9/lib64/libgfxprim-widgets.so.1(gp_widget_ops_render+0x123)[0x7fe69ec1bc13]
) = 75
writev(2, [{iov_base="/lib64/libgfxprim-widgets.so.1", iov_len=30}, {iov_base="(", iov_len=1}, {iov_base="+0x", iov_len=3}, {iov_base="13bb0", iov_len=5}, {iov_base=")", iov_len=1}, {iov_base="[0x", iov_len=3}, {iov_base="7fe69ec14bb0", iov_len=12}, {iov_base="]\n", iov_len=2}], 8/lib64/libgfxprim-widgets.so.1(+0x13bb0)[0x7fe69ec14bb0]
) = 57
writev(2, [{iov_base="/lib64/libgfxprim-widgets.so.1", iov_len=30}, {iov_base="(", iov_len=1}, {iov_base="gp_widget_ops_render", iov_len=20}, {iov_base="+0x", iov_len=3}, {iov_base="123", iov_len=3}, {iov_base=")", iov_len=1}, {iov_base="[0x", iov_len=3}, {iov_base="7fe69ec1bc13", iov_len=12}, {iov_base="]\n", iov_len=2}], 9/lib64/libgfxprim-widgets.so.1(gp_widget_ops_render+0x123)[0x7fe69ec1bc13]
) = 75
writev(2, [{iov_base="/lib64/libgfxprim-widgets.so.1", iov_len=30}, {iov_base="(", iov_len=1}, {iov_base="gp_widget_render", iov_len=16}, {iov_base="+0x", iov_len=3}, {iov_base="83", iov_len=2}, {iov_base=")", iov_len=1}, {iov_base="[0x", iov_len=3}, {iov_base="7fe69ec1bf03", iov_len=12}, {iov_base="]\n", iov_len=2}], 9/lib64/libgfxprim-widgets.so.1(gp_widget_render+0x83)[0x7fe69ec1bf03]
) = 70
writev(2, [{iov_base="/lib64/libgfxprim-widgets.so.1", iov_len=30}, {iov_base="(", iov_len=1}, {iov_base="gp_widgets_event", iov_len=16}, {iov_base="+0x", iov_len=3}, {iov_base="1e4", iov_len=3}, {iov_base=")", iov_len=1}, {iov_base="[0x", iov_len=3}, {iov_base="7fe69ec1f984", iov_len=12}, {iov_base="]\n", iov_len=2}], 9/lib64/libgfxprim-widgets.so.1(gp_widgets_event+0x1e4)[0x7fe69ec1f984]
) = 71
writev(2, [{iov_base="/lib64/libgfxprim-widgets.so.1", iov_len=30}, {iov_base="(", iov_len=1}, {iov_base="gp_widgets_process_events", iov_len=25}, {iov_base="+0x", iov_len=3}, {iov_base="18", iov_len=2}, {iov_base=")", iov_len=1}, {iov_base="[0x", iov_len=3}, {iov_base="7fe69ec1fce8", iov_len=12}, {iov_base="]\n", iov_len=2}], 9/lib64/libgfxprim-widgets.so.1(gp_widgets_process_events+0x18)[0x7fe69ec1fce8]
) = 79
writev(2, [{iov_base="/lib64/libgfxprim-widgets.so.1", iov_len=30}, {iov_base="(", iov_len=1}, {iov_base="+0x", iov_len=3}, {iov_base="1eef0", iov_len=5}, {iov_base=")", iov_len=1}, {iov_base="[0x", iov_len=3}, {iov_base="7fe69ec1fef0", iov_len=12}, {iov_base="]\n", iov_len=2}], 8/lib64/libgfxprim-widgets.so.1(+0x1eef0)[0x7fe69ec1fef0]
) = 57
writev(2, [{iov_base="/lib64/libgfxprim.so.1", iov_len=22}, {iov_base="(", iov_len=1}, {iov_base="gp_fds_poll", iov_len=11}, {iov_base="+0x", iov_len=3}, {iov_base="8a", iov_len=2}, {iov_base=")", iov_len=1}, {iov_base="[0x", iov_len=3}, {iov_base="7fe69ecfec6a", iov_len=12}, {iov_base="]\n", iov_len=2}], 9/lib64/libgfxprim.so.1(gp_fds_poll+0x8a)[0x7fe69ecfec6a]
) = 57
writev(2, [{iov_base="/lib64/libgfxprim-widgets.so.1", iov_len=30}, {iov_base="(", iov_len=1}, {iov_base="gp_widgets_main_loop", iov_len=20}, {iov_base="+0x", iov_len=3}, {iov_base="be", iov_len=2}, {iov_base=")", iov_len=1}, {iov_base="[0x", iov_len=3}, {iov_base="7fe69ec1fe6e", iov_len=12}, {iov_base="]\n", iov_len=2}], 9/lib64/libgfxprim-widgets.so.1(gp_widgets_main_loop+0xbe)[0x7fe69ec1fe6e]
) = 74
writev(2, [{iov_base="./gppdf", iov_len=7}, {iov_base="[0x", iov_len=3}, {iov_base="4023f6", iov_len=6}, {iov_base="]\n", iov_len=2}], 4./gppdf[0x4023f6]
) = 18
writev(2, [{iov_base="/lib64/libc.so.6", iov_len=16}, {iov_base="(", iov_len=1}, {iov_base="+0x", iov_len=3}, {iov_base="405b0", iov_len=5}, {iov_base=")", iov_len=1}, {iov_base="[0x", iov_len=3}, {iov_base="7fe69b8405b0", iov_len=12}, {iov_base="]\n", iov_len=2}], 8/lib64/libc.so.6(+0x405b0)[0x7fe69b8405b0]
) = 43
writev(2, [{iov_base="/lib64/libc.so.6", iov_len=16}, {iov_base="(", iov_len=1}, {iov_base="__libc_start_main", iov_len=17}, {iov_base="+0x", iov_len=3}, {iov_base="8b", iov_len=2}, {iov_base=")", iov_len=1}, {iov_base="[0x", iov_len=3}, {iov_base="7fe69b840679", iov_len=12}, {iov_base="]\n", iov_len=2}], 9/lib64/libc.so.6(__libc_start_main+0x8b)[0x7fe69b840679]
) = 57
writev(2, [{iov_base="./gppdf", iov_len=7}, {iov_base="(", iov_len=1}, {iov_base="_start", iov_len=6}, {iov_base="+0x", iov_len=3}, {iov_base="25", iov_len=2}, {iov_base=")", iov_len=1}, {iov_base="[0x", iov_len=3}, {iov_base="402425", iov_len=6}, {iov_base="]\n", iov_len=2}], 9./gppdf(_start+0x25)[0x402425]
) = 31
rt_sigprocmask(SIG_UNBLOCK, [ABRT], NULL, 8) = 0
gettid()                                = 2858
getpid()                                = 2858
tgkill(2858, 2858, SIGABRT)             = 0
--- SIGABRT {si_signo=SIGABRT, si_code=SI_TKILL, si_pid=2858, si_uid=1000} ---
+++ killed by SIGABRT (core dumped) +++
Aborted (core dumped)

The problem is with several PDF files. Actually I haven't been able to open any PDF file. I used packaged versions of libgfxprim.so.1 and libmupdf.so.1, I also tested packaged version (https://build.opensuse.org/package/show/home:metan/gppdf).

Sefault in init

Running it with no args and I get the following:

(lldb) run
Process 24402 launched: '/bin/gppdf' (x86_64)
Warning at line 061

052:       "len": 10,
053:       "on_event": "tbox_search_event"
054:      },
055:      {
056:       "type": "spinbutton",
057:       "choices": ["fit width", "fit page", "125%", "150%"]
058:      },
059:      {
060:       "type": "button",
061:       "btype": "rotate_cw",
                               ^
Invalid button type!
Warning at line 063

054:      },
055:      {
056:       "type": "spinbutton",
057:       "choices": ["fit width", "fit page", "125%", "150%"]
058:      },
059:      {
060:       "type": "button",
061:       "btype": "rotate_cw",
062:       "on_event": "rotate_cw"
063:      },
           ^
Labeled button without label!
Warning at line 066

057:       "choices": ["fit width", "fit page", "125%", "150%"]
058:      },
059:      {
060:       "type": "button",
061:       "btype": "rotate_cw",
062:       "on_event": "rotate_cw"
063:      },
064:      {
065:       "type": "button",
066:       "btype": "rotate_ccw",
                                ^
Invalid button type!
Warning at line 068

059:      {
060:       "type": "button",
061:       "btype": "rotate_cw",
062:       "on_event": "rotate_cw"
063:      },
064:      {
065:       "type": "button",
066:       "btype": "rotate_ccw",
067:       "on_event": "rotate_ccw"
068:      },
           ^
Labeled button without label!
Process 24402 stopped
* thread #1, name = 'gppdf', stop reason = signal SIGSEGV: invalid address (fault address: 0x0)
    frame #0: 0x0000555555556c58 gppdf`app_init + 8
gppdf`app_init:
->  0x555555556c58 <+8>:  movq   (%rsi), %rsi
    0x555555556c5b <+11>: movq   0x33fe(%rip), %rdi        ; controls + 32
    0x555555556c62 <+18>: jmp    0x555555556a80            ; load_document.isra.0
    0x555555556c67:       nopw   (%rax,%rax)
(lldb) bt
* thread #1, name = 'gppdf', stop reason = signal SIGSEGV: invalid address (fault address: 0x0)
  * frame #0: 0x0000555555556c58 gppdf`app_init + 8
    frame #1: 0x00007ffff7e8cdc4 libgfxprim-widgets.so.1`gp_widgets_main_loop + 68
    frame #2: 0x0000555555556418 gppdf`main + 248
    frame #3: 0x00007ffff4e1a5b0 libc.so.6`__libc_start_call_main + 130
    frame #4: 0x00007ffff4e1a679 libc.so.6`__libc_start_main@@GLIBC_2.34 + 139
    frame #5: 0x0000555555556445 gppdf`_start + 37

-V / --version, about screen

Although these tools are minimal, it'd be worth to have way to print version and also have some about screen with homepage.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.