msgpack-perl icon indicating copy to clipboard operation
msgpack-perl copied to clipboard

Invalid type 'Q' in pack at <...>

Open alexander-potemkin opened this issue 13 years ago • 9 comments

Hi,

are there any suggestions (how to get rid of) of any plans to get rid of the following warning:

Invalid type 'Q' in pack at <...>MessagePack/PP.pm line 20.

at 32bit platforms?

I understand the reason for this warning, but what about catching it inside SIG{'WARN'} inside the same BEGIN block, to avoid false issue reporting? Or there is some special reason not to do this?

Thanks, Alexander.

alexander-potemkin avatar Nov 08 '12 11:11 alexander-potemkin

Hi,

Can you paste perl -V on your environment?

gfx avatar Nov 09 '12 12:11 gfx

Hi,

apologize for the delay, here it is:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\> C:\strawberry\perl\bin\perl.exe -V
Summary of my perl5 (revision 5 version 16 subversion 1) configuration:

  Platform:
    osname=MSWin32, osvers=4.0, archname=MSWin32-x86-multi-thread
    uname='Win32 strawberry-perl 5.16.1.1 #1 Thu Aug  9 09:54:46 2012 i386'
    config_args='undef'
    hint=recommended, useposix=true, d_sigaction=undef
    useithreads=define, usemultiplicity=define
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=undef, use64bitall=undef, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='gcc', ccflags =' -s -O2 -DWIN32  -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT
_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-aliasing -mms-bitfields',
    optimize='-s -O2',
    cppflags='-DWIN32'
    ccversion='', gccversion='4.6.3', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='long long', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='g++.exe', ldflags ='-s -L"C:\strawberry\perl\lib\CORE" -L"C:\strawberry\c\lib"'
    libpth=C:\strawberry\c\lib C:\strawberry\c\i686-w64-mingw32\lib
    libs=-lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32
 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion
 -lodbc32 -lodbccp32 -lcomctl32
    perllibs=-lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladva
pi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lver
sion -lodbc32 -lodbccp32 -lcomctl32
    libc=, so=dll, useshrplib=true, libperl=libperl516.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags='-mdll -s -L"C:\strawberry\perl\lib\CORE" -L"C:\strawberry\c\lib"'


Characteristics of this binary (from libperl):
  Compile-time options: HAS_TIMES HAVE_INTERP_INTERN MULTIPLICITY
                        PERLIO_LAYERS PERL_DONT_CREATE_GVSV
                        PERL_IMPLICIT_CONTEXT PERL_IMPLICIT_SYS
                        PERL_MALLOC_WRAP PERL_PRESERVE_IVUV PL_OP_SLAB_ALLOC
                        USE_ITHREADS USE_LARGE_FILES USE_LOCALE
                        USE_LOCALE_COLLATE USE_LOCALE_CTYPE
                        USE_LOCALE_NUMERIC USE_PERLIO USE_PERL_ATOF
  Built under MSWin32
  Compiled at Aug  9 2012 10:03:09
  @INC:
    C:/strawberry/perl/site/lib
    C:/strawberry/perl/vendor/lib
    C:/strawberry/perl/lib
    .


That is, basically, just a latest portable Strawberry Perl 5.16, 32 bit.

alexander-potemkin avatar Nov 12 '12 08:11 alexander-potemkin

I wrote the eval-trapping code because I thank that that code don't show the warning. Would you show the sample code?

makamaka avatar Nov 13 '12 02:11 makamaka

I can't reproduce on the sample code for now - let me double-verify on what could cause eval to fail and come back to you, if reproduced.

Thank you for the prompt response.

alexander-potemkin avatar Nov 14 '12 08:11 alexander-potemkin

Got it reproduced - please, get the source code from here: http://dl.dropbox.com/u/3556694/test.tar

Any clue?

alexander-potemkin avatar Nov 15 '12 12:11 alexander-potemkin

Localize signal handler

package Handler;

local $SIG{__DIE__} = sub {
        print "Caught die: @_";
};

# any code

1;

or change order of importing modules

use Data::MessagePack;
use Handler;
use strict;
use warnings;

exit 0;

syohex avatar Nov 16 '12 00:11 syohex

Got it, thank you!

alexander-potemkin avatar Nov 16 '12 04:11 alexander-potemkin

As syohex said, there are some way to solve the probblem. But I think that localizing $SIG{DIE} in MessagePack::PP is more proper.

makamaka avatar Nov 16 '12 06:11 makamaka

Blog about $SIG{__DIE__} and eval in Japanese.

http://perl.g.hatena.ne.jp/Cormorant/20080919/1221842240

syohex avatar Nov 16 '12 09:11 syohex