EyalAr / lwip

Light Weight Image Processor for NodeJS
MIT License
2.37k stars 230 forks source link

Corrupt JPEG data: premature end of data segment and crashes Node app #275

Open luislobo opened 8 years ago

luislobo commented 8 years ago

While processing some of the JPEG files that we have to process, we are encountering that sometimes, we have this error Corrupt JPEG data: premature end of data segment

It causes the app to crash with a SIGABRT.

The source code we use is:

var lwip = require('lwip');
var THUMB_SIZE_X = 128;
var THUMB_SIZE_Y = 96;

lwip.open('testfile.jpg', function(err, image) {
  // check 'err'. use 'image'.
  if (err) {
    console.log(err);
  } else {
    image.batch()
      .resize(THUMB_SIZE_X, THUMB_SIZE_Y)
      .sharpen(50)
      .writeFile('testfile.jpg', {
          quality: 75
        },
        function(err) {
          if (err) {
            console.log(err);
          } else {
            console.log('done');
          }
        });
  }
});

Here is the corrupt JPEG file: https://cloud.githubusercontent.com/assets/453120/18894024/c3c5888e-8510-11e6-878f-43e55a12b8b0.jpg

The error we get is:

$ node test.js                                                                                                                                                                        ⬡ 4.4.6 [±development ●●●]
Corrupt JPEG data: premature end of data segment
*** Error in `node': double free or corruption (fasttop): 0x00007fa864016f00 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x77725)[0x7fa87a15e725]
/lib/x86_64-linux-gnu/libc.so.6(+0x7ff4a)[0x7fa87a166f4a]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7fa87a16aabc]
/home/lobo/dev/job-manager/node_modules/lwip/build/Release/lwip_decoder.node(_ZN18DecodeBufferWorker7ExecuteEv+0x1e4)[0x7fa8779b55f4]
node[0xfae9d1]
node[0xfbd609]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x76fa)[0x7fa87a4b76fa]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x6d)[0x7fa87a1edb5d]
======= Memory map: ========
00400000-01781000 r-xp 00000000 fc:01 25185293                           /home/lobo/.nvm/versions/node/v4.4.6/bin/node
01981000-0199a000 rw-p 01381000 fc:01 25185293                           /home/lobo/.nvm/versions/node/v4.4.6/bin/node
0199a000-019ab000 rw-p 00000000 00:00 0 
01a05000-01ceb000 rw-p 00000000 00:00 0                                  [heap]
5e70de00000-5e70de14000 rw-p 00000000 00:00 0 
6a40a77d000-6a40a7bd000 rw-p 00000000 00:00 0 
6a40a7bd000-6a40ab7d000 ---p 00000000 00:00 0 
f05e5d00000-f05e5e00000 rw-p 00000000 00:00 0 
125aba000000-125aba200000 rw-p 00000000 00:00 0 
125aba200000-125abb000000 ---p 00000000 00:00 0 
125abb000000-125abb200000 rw-p 00000000 00:00 0 
125abb200000-125abc000000 ---p 00000000 00:00 0 
19acd47a7000-19acd4900000 ---p 00000000 00:00 0 
19acd4900000-19acd4905000 rw-p 00000000 00:00 0 
19acd4905000-19acd4906000 ---p 00000000 00:00 0 
19acd4906000-19acd4907000 rwxp 00000000 00:00 0 
19acd4907000-19acd4a00000 ---p 00000000 00:00 0 
19acd4a00000-19acd4a05000 rw-p 00000000 00:00 0 
19acd4a05000-19acd4a06000 ---p 00000000 00:00 0 
19acd4a06000-19acd4a07000 rwxp 00000000 00:00 0 
19acd4a07000-19acd4b00000 ---p 00000000 00:00 0 
19acd4b00000-19acd4b05000 rw-p 00000000 00:00 0 
19acd4b05000-19acd4b06000 ---p 00000000 00:00 0 
19acd4b06000-19acd4b07000 rwxp 00000000 00:00 0 
19acd4b07000-19acd4c00000 ---p 00000000 00:00 0 
19acd4c00000-19acd4c05000 rw-p 00000000 00:00 0 
19acd4c05000-19acd4c06000 ---p 00000000 00:00 0 
19acd4c06000-19acd4c4b000 rwxp 00000000 00:00 0 
19acd4c4b000-19acd4d00000 ---p 00000000 00:00 0 
19acd4d00000-19acd4d05000 rw-p 00000000 00:00 0 
19acd4d05000-19acd4d06000 ---p 00000000 00:00 0 
19acd4d06000-19acd4dff000 rwxp 00000000 00:00 0 
19acd4dff000-19acf47a7000 ---p 00000000 00:00 0 
217e8de00000-217e8df00000 rw-p 00000000 00:00 0 
2b7b6db0d000-2b7b6db40000 ---p 00000000 00:00 0 
2b7b6db40000-2b7b6db60000 rw-p 00000000 00:00 0 
2b7b6db60000-2b7b6db6d000 ---p 00000000 00:00 0 
2fa49b200000-2fa49b300000 rw-p 00000000 00:00 0 
32f19f8c6000-32f19f8e6000 rw-p 00000000 00:00 0 
32f19f8e6000-32f19fac6000 ---p 00000000 00:00 0 
3513289d9000-3513289da000 r-xp 00000000 00:00 0 
3819e1500000-3819e1600000 rw-p 00000000 00:00 0 
396d56c00000-396d56cdd000 rw-p 00000000 00:00 0 
7fa858000000-7fa858021000 rw-p 00000000 00:00 0 
7fa858021000-7fa85c000000 ---p 00000000 00:00 0 
7fa860000000-7fa860030000 rw-p 00000000 00:00 0 
7fa860030000-7fa864000000 ---p 00000000 00:00 0 
7fa864000000-7fa864021000 rw-p 00000000 00:00 0 
7fa864021000-7fa868000000 ---p 00000000 00:00 0 
7fa868000000-7fa868023000 rw-p 00000000 00:00 0 
7fa868023000-7fa86c000000 ---p 00000000 00:00 0 
7fa86c000000-7fa86c034000 rw-p 00000000 00:00 0 
7fa86c034000-7fa870000000 ---p 00000000 00:00 0 
7fa870000000-7fa870033000 rw-p 00000000 00:00 0 
7fa870033000-7fa874000000 ---p 00000000 00:00 0 
7fa87599a000-7fa87599b000 ---p 00000000 00:00 0 
7fa87599b000-7fa87619b000 rw-p 00000000 00:00 0 
7fa87619b000-7fa87619c000 ---p 00000000 00:00 0 
7fa87619c000-7fa87699c000 rw-p 00000000 00:00 0 
7fa87699c000-7fa87699d000 ---p 00000000 00:00 0 
7fa87699d000-7fa87719d000 rw-p 00000000 00:00 0 
7fa87719d000-7fa87719e000 ---p 00000000 00:00 0 
7fa87719e000-7fa87799e000 rw-p 00000000 00:00 0 
7fa87799e000-7fa877a2a000 r-xp 00000000 fc:01 1710621                    /home/lobo/dev/job-manager/node_modules/lwip/build/Release/lwip_decoder.node
7fa877a2a000-7fa877c2a000 ---p 0008c000 fc:01 1710621                    /home/lobo/dev/job-manager/node_modules/lwip/build/Release/lwip_decoder.node
7fa877c2a000-7fa877c2b000 r--p 0008c000 fc:01 1710621                    /home/lobo/dev/job-manager/node_modules/lwip/build/Release/lwip_decoder.node
7fa877c2b000-7fa877c2c000 rw-p 0008d000 fc:01 1710621                    /home/lobo/dev/job-manager/node_modules/lwip/build/Release/lwip_decoder.node
7fa877c2c000-7fa877c2d000 rw-p 00000000 00:00 0 
7fa877c2d000-7fa877ca1000 r-xp 00000000 fc:01 1710739                    /home/lobo/dev/job-manager/node_modules/lwip/build/Release/lwip_encoder.node
7fa877ca1000-7fa877ea1000 ---p 00074000 fc:01 1710739                    /home/lobo/dev/job-manager/node_modules/lwip/build/Release/lwip_encoder.node
7fa877ea1000-7fa877ea2000 r--p 00074000 fc:01 1710739                    /home/lobo/dev/job-manager/node_modules/lwip/build/Release/lwip_encoder.node
7fa877ea2000-7fa877ea3000 rw-p 00075000 fc:01 1710739                    /home/lobo/dev/job-manager/node_modules/lwip/build/Release/lwip_encoder.node
7fa877ea3000-7fa877ea4000 rw-p 00000000 00:00 0 
7fa877ea4000-7fa877ee2000 r-xp 00000000 fc:01 1710769                    /home/lobo/dev/job-manager/node_modules/lwip/build/Release/lwip_image.node
7fa877ee2000-7fa8780e1000 ---p 0003e000 fc:01 1710769                    /home/lobo/dev/job-manager/node_modules/lwip/build/Release/lwip_image.node
7fa8780e1000-7fa8780e2000 r--p 0003d000 fc:01 1710769                    /home/lobo/dev/job-manager/node_modules/lwip/build/Release/lwip_image.node
7fa8780e2000-7fa8780e3000 rw-p 0003e000 fc:01 1710769                    /home/lobo/dev/job-manager/node_modules/lwip/build/Release/lwip_image.node
7fa8780e3000-7fa8780e4000 ---p 00000000 00:00 0 
7fa8780e4000-7fa8788e4000 rw-p 00000000 00:00 0 
7fa8788e4000-7fa8788e5000 ---p 00000000 00:00 0 
7fa8788e5000-7fa8790e5000 rw-p 00000000 00:00 0 
7fa8790e5000-7fa8790e6000 ---p 00000000 00:00 0 
7fa8790e6000-7fa8798e6000 rw-p 00000000 00:00 0 
7fa8798e6000-7fa8798e7000 ---p 00000000 00:00 0 
7fa8798e7000-7fa87a0e7000 rw-p 00000000 00:00 0 
7fa87a0e7000-7fa87a2a7000 r-xp 00000000 fc:01 4063428                    /lib/x86_64-linux-gnu/libc-2.23.so
7fa87a2a7000-7fa87a4a6000 ---p 001c0000 fc:01 4063428                    /lib/x86_64-linux-gnu/libc-2.23.so
7fa87a4a6000-7fa87a4aa000 r--p 001bf000 fc:01 4063428                    /lib/x86_64-linux-gnu/libc-2.23.so
7fa87a4aa000-7fa87a4ac000 rw-p 001c3000 fc:01 4063428                    /lib/x86_64-linux-gnu/libc-2.23.so
7fa87a4ac000-7fa87a4b0000 rw-p 00000000 00:00 0 
7fa87a4b0000-7fa87a4c8000 r-xp 00000000 fc:01 4063427                    /lib/x86_64-linux-gnu/libpthread-2.23.so
7fa87a4c8000-7fa87a6c7000 ---p 00018000 fc:01 4063427                    /lib/x86_64-linux-gnu/libpthread-2.23.so
7fa87a6c7000-7fa87a6c8000 r--p 00017000 fc:01 4063427                    /lib/x86_64-linux-gnu/libpthread-2.23.so
7fa87a6c8000-7fa87a6c9000 rw-p 00018000 fc:01 4063427                    /lib/x86_64-linux-gnu/libpthread-2.23.so
7fa87a6c9000-7fa87a6cd000 rw-p 00000000 00:00 0 
7fa87a6cd000-7fa87a6e3000 r-xp 00000000 fc:01 4063303                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7fa87a6e3000-7fa87a8e2000 ---p 00016000 fc:01 4063303                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7fa87a8e2000-7fa87a8e3000 rw-p 00015000 fc:01 4063303                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7fa87a8e3000-7fa87a9eb000 r-xp 00000000 fc:01 4063420                    /lib/x86_64-linux-gnu/libm-2.23.so
7fa87a9eb000-7fa87abea000 ---p 00108000 fc:01 4063420                    /lib/x86_64-linux-gnu/libm-2.23.so
7fa87abea000-7fa87abeb000 r--p 00107000 fc:01 4063420                    /lib/x86_64-linux-gnu/libm-2.23.so
7fa87abeb000-7fa87abec000 rw-p 00108000 fc:01 4063420                    /lib/x86_64-linux-gnu/libm-2.23.so
7fa87abec000-7fa87ad5e000 r-xp 00000000 fc:01 12059488                   /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
7fa87ad5e000-7fa87af5e000 ---p 00172000 fc:01 12059488                   /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
7fa87af5e000-7fa87af68000 r--p 00172000 fc:01 12059488                   /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
7fa87af68000-7fa87af6a000 rw-p 0017c000 fc:01 12059488                   /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
7fa87af6a000-7fa87af6e000 rw-p 00000000 00:00 0 
7fa87af6e000-7fa87af75000 r-xp 00000000 fc:01 4063423                    /lib/x86_64-linux-gnu/librt-2.23.so
7fa87af75000-7fa87b174000 ---p 00007000 fc:01 4063423                    /lib/x86_64-linux-gnu/librt-2.23.so
7fa87b174000-7fa87b175000 r--p 00006000 fc:01 4063423                    /lib/x86_64-linux-gnu/librt-2.23.so
7fa87b175000-7fa87b176000 rw-p 00007000 fc:01 4063423                    /lib/x86_64-linux-gnu/librt-2.23.so
7fa87b176000-7fa87b179000 r-xp 00000000 fc:01 4063429                    /lib/x86_64-linux-gnu/libdl-2.23.so
7fa87b179000-7fa87b378000 ---p 00003000 fc:01 4063429                    /lib/x86_64-linux-gnu/libdl-2.23.so
7fa87b378000-7fa87b379000 r--p 00002000 fc:01 4063429                    /lib/x86_64-linux-gnu/libdl-2.23.so
7fa87b379000-7fa87b37a000 rw-p 00003000 fc:01 4063429                    /lib/x86_64-linux-gnu/libdl-2.23.so
7fa87b37a000-7fa87b3a0000 r-xp 00000000 fc:01 4063424                    /lib/x86_64-linux-gnu/ld-2.23.so
7fa87b570000-7fa87b576000 rw-p 00000000 00:00 0 
7fa87b59c000-7fa87b59f000 rw-p 00000000 00:00 0 
7fa87b59f000-7fa87b5a0000 r--p 00025000 fc:01 4063424                    /lib/x86_64-linux-gnu/ld-2.23.so
7fa87b5a0000-7fa87b5a1000 rw-p 00026000 fc:01 4063424                    /lib/x86_64-linux-gnu/ld-2.23.so
7fa87b5a1000-7fa87b5a2000 rw-p 00000000 00:00 0 
7ffe1ea17000-7ffe1ea38000 rw-p 00000000 00:00 0                          [stack]
7ffe1ea9e000-7ffe1eaa0000 r--p 00000000 00:00 0                          [vvar]
7ffe1eaa0000-7ffe1eaa2000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
[1]    3036 abort      node test.js

Can anyone help with this one?

mraxus commented 7 years ago

I have a similar issue where the process dies without the possibility to recover.

require('lwip').open('./input-all/G0118961.JPG', function(err, image) {
  console.log(err)
})

Run with:

Output:

Corrupt JPEG data: premature end of data segment
node(89462,0x700001e48000) malloc: *** error for object 0x104a69000: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
[1]    89462 abort      node app.js

Image:

https://user-images.githubusercontent.com/837533/27992149-fa53c6f2-648c-11e7-81ad-d58463c28792.JPG