Kitware / KWStyle

Kitware Style Checker
Other
53 stars 29 forks source link

std::bad_alloc when XML file contains comments in feature tag #17

Open olibre opened 8 years ago

olibre commented 8 years ago

kwstyle -v -xml KWStyle.xml ../modules/main/main.cpp throws std::bad_alloc without any print.

The KWStyle.xml:

<?xml version="1.0" encoding="iso-8859-1"?>
<Description>

    <AnyXXX>
        <!-- any text -->
    </AnyXXX>

</Description>

The strace output:

execve("/usr/local/bin/kwstyle", ["kwstyle", "-v", "-xml", "KWStyle.xml", "../modules/main/main.cpp"], [/* 34 vars */]) = 0
brk(0)                                  = 0x8e2000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf35f4b000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=49801, ...}) = 0
mmap(NULL, 49801, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdf35f3e000
close(3)                                = 0
open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\16\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=19512, ...}) = 0
mmap(NULL, 2109744, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fdf35b27000
mprotect(0x7fdf35b2a000, 2093056, PROT_NONE) = 0
mmap(0x7fdf35d29000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7fdf35d29000
close(3)                                = 0
open("/lib64/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20\265\5\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=991744, ...}) = 0
mmap(NULL, 3171360, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fdf35820000
mprotect(0x7fdf35909000, 2093056, PROT_NONE) = 0
mmap(0x7fdf35b08000, 40960, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe8000) = 0x7fdf35b08000
mmap(0x7fdf35b12000, 82976, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fdf35b12000
close(3)                                = 0
open("/lib64/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260T\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1141552, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf35f3d000
mmap(NULL, 3150168, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fdf3551e000
mprotect(0x7fdf3561f000, 2093056, PROT_NONE) = 0
mmap(0x7fdf3581e000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x100000) = 0x7fdf3581e000
close(3)                                = 0
open("/lib64/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360*\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=88720, ...}) = 0
mmap(NULL, 2184192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fdf35308000
mprotect(0x7fdf3531d000, 2093056, PROT_NONE) = 0
mmap(0x7fdf3551c000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14000) = 0x7fdf3551c000
close(3)                                = 0
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\34\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2107760, ...}) = 0
mmap(NULL, 3932736, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fdf34f47000
mprotect(0x7fdf350fd000, 2097152, PROT_NONE) = 0
mmap(0x7fdf352fd000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b6000) = 0x7fdf352fd000
mmap(0x7fdf35303000, 16960, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fdf35303000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf35f3c000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf35f3a000
arch_prctl(ARCH_SET_FS, 0x7fdf35f3a740) = 0
mprotect(0x7fdf352fd000, 16384, PROT_READ) = 0
mprotect(0x7fdf3551c000, 4096, PROT_READ) = 0
mprotect(0x7fdf3581e000, 4096, PROT_READ) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf35f39000
mprotect(0x7fdf35b08000, 32768, PROT_READ) = 0
mprotect(0x7fdf35d29000, 4096, PROT_READ) = 0
mprotect(0x84c000, 4096, PROT_READ)     = 0
mprotect(0x7fdf35f4c000, 4096, PROT_READ) = 0
munmap(0x7fdf35f3e000, 49801)           = 0
brk(0)                                  = 0x8e2000
brk(0x903000)                           = 0x903000
brk(0)                                  = 0x903000
lstat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0
stat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0
getcwd("/home/ohessling/dev/foundation/scripts", 2048) = 39
lstat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/home/OAD", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/home/OAD/ohessling", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
lstat("/home/OAD/ohessling/dev", {st_mode=S_IFLNK|0777, st_size=19, ...}) = 0
readlink("/home/OAD/ohessling/dev", "/home/ohessling/dev", 4095) = 19
lstat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/home/ohessling", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
lstat("/home/ohessling/dev", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/home/ohessling/dev/foundation", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
lstat("/home/ohessling/dev/foundation/scripts", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
lstat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/home/OAD", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/home/OAD/ohessling", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
lstat("/home/OAD/ohessling/dev", {st_mode=S_IFLNK|0777, st_size=19, ...}) = 0
readlink("/home/OAD/ohessling/dev", "/home/ohessling/dev", 4095) = 19
lstat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/home/ohessling", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
lstat("/home/ohessling/dev", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/home/ohessling/dev/foundation", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
lstat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/home/OAD", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/home/OAD/ohessling", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
lstat("/home/OAD/ohessling/dev", {st_mode=S_IFLNK|0777, st_size=19, ...}) = 0
readlink("/home/OAD/ohessling/dev", "/home/ohessling/dev", 4095) = 19
  tat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
▽stat("/home/ohessling", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
lstat("/home/ohessling/dev", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/home/OAD", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/home/OAD/ohessling", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
stat("/home/ohessling/dev", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("KWStyle.xml", O_RDONLY)           = 3
lseek(3, 0, SEEK_END)                   = 4833
lseek(3, 0, SEEK_CUR)                   = 4833
lseek(3, 0, SEEK_SET)                   = 0
read(3, "<?xml version=\"1.0\" encoding=\"is"..., 8191) = 4833
brk(0)                                  = 0x903000
brk(0x92a000)                           = 0x92a000
mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf35ef9000
brk(0)                                  = 0x92a000
brk(0)                                  = 0x92a000
brk(0x90b000)                           = 0x90b000
brk(0)                                  = 0x90b000
mmap(NULL, 524288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf35e79000
munmap(0x7fdf35ef9000, 262144)          = 0
mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf35d79000
munmap(0x7fdf35e79000, 524288)          = 0
mmap(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf34d47000
munmap(0x7fdf35d79000, 1048576)         = 0
mmap(NULL, 4194304, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf34947000
munmap(0x7fdf34d47000, 2097152)         = 0
mmap(NULL, 8388608, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf34147000
munmap(0x7fdf34947000, 4194304)         = 0
mmap(NULL, 16777216, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf33147000
munmap(0x7fdf34147000, 8388608)         = 0
mmap(NULL, 33554432, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf31147000
munmap(0x7fdf33147000, 16777216)        = 0
mmap(NULL, 67108864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf2d147000
munmap(0x7fdf31147000, 33554432)        = 0
mmap(NULL, 134217728, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf25147000
munmap(0x7fdf2d147000, 67108864)        = 0
mmap(NULL, 268435456, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf15147000
munmap(0x7fdf25147000, 134217728)       = 0
mmap(NULL, 536870912, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdef5147000
munmap(0x7fdf15147000, 268435456)       = 0
mmap(NULL, 1073741824, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdeb5147000
munmap(0x7fdef5147000, 536870912)       = 0
mmap(NULL, 2147483648, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fde35147000
munmap(0x7fdeb5147000, 1073741824)      = 0
mmap(NULL, 4294967296, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdd35147000
munmap(0x7fde35147000, 2147483648)      = 0
mmap(NULL, 8589934592, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0)                                  = 0x90b000
brk(0x20090b000)                        = 0x90b000
mmap(NULL, 8590069760, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 134217728, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x7fdf2cf47000
munmap(0x7fdf2cf47000, 51089408)        = 0
munmap(0x7fdf34000000, 16019456)        = 0
mprotect(0x7fdf30000000, 135168, PROT_READ|PROT_WRITE) = 0
mmap(NULL, 8589934592, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
write(2, "terminate called after throwing "..., 48terminate called after throwing an instance of ') = 48
write(2, "std::bad_alloc", 14std::bad_alloc)          = 14
write(2, "'\n", 2'
)                      = 2
write(2, "  what():  ", 11  what():  )             = 11
write(2, "std::bad_alloc", 14std::bad_alloc)          = 14
write(2, "\n", 1
)                       = 1
rt_sigprocmask(SIG_UNBLOCK, [ABRT], NULL, 8) = 0
gettid()                                = 12482
tgkill(12482, 12482, SIGABRT)           = 0
--- SIGABRT {si_signo=SIGABRT, si_code=SI_TKILL, si_pid=12482, si_uid=178785111} ---
Nekto89 commented 6 years ago

I can remove simple comments using regex and it fixes the issue, but is this a proper way? It might be better to just integrate thirdparty for proper xml parsing (encoding, CDATA, character escaping, etc.). pugixml for example