Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C tar_append_树上的libtar segfaults_C_Linux_Tar - Fatal编程技术网

C tar_append_树上的libtar segfaults

C tar_append_树上的libtar segfaults,c,linux,tar,C,Linux,Tar,Linux机器3.2.0-34-generic,x86_64 资料来源:libtar 版本:1.2.11-8 #include <stdio.h> #include <libtar.h> #include <fcntl.h> int main(void) { TAR *pTar; char *tarFilename = "file.tar"; char *srcDir = "/home/test"; char *extractTo = "."; tar_ope

Linux机器3.2.0-34-generic,x86_64

资料来源:libtar 版本:1.2.11-8

#include <stdio.h>
#include <libtar.h>
#include <fcntl.h>
int main(void)
{
TAR *pTar;
char *tarFilename = "file.tar";
char *srcDir = "/home/test";
char *extractTo = ".";
tar_open(&pTar, tarFilename, NULL, O_WRONLY | O_CREAT, 0644, TAR_GNU);
tar_append_tree(pTar, srcDir, extractTo);
tar_close(pTar);
return (0);
}
#包括
#包括
#包括
内部主(空)
{
焦油*pTar;
char*tarFilename=“file.tar”;
char*srcDir=“/home/test”;
char*extractTo=“.”;
tar_open(&pTar,tarFilename,NULL,O_WRONLY | O_CREAT,0644,tar_GNU);
tar_-append_树(pTar、srcDir、extractTo);
焦油关闭(pTar);
返回(0);
}
编译为:

gcc main.c-o run-ltar

Program received signal SIGABRT, Aborted.
0x00007ffff7845425 in __GI_raise (sig=<optimized out>)
at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
64  ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
0  0x00007ffff7845425 in __GI_raise (sig=<optimized out>)
at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
1  0x00007ffff7848b8b in __GI_abort () at abort.c:91
2  0x00007ffff788339e in __libc_message (do_abort=2, 
  fmt=0x7ffff798ae3f "*** %s ***: %s terminated\n")
  at ../sysdeps/unix/sysv/linux/libc_fatal.c:201
3  0x00007ffff7919807 in __GI___fortify_fail (
  msg=0x7ffff798add6 "buffer overflow detected") at fortify_fail.c:32
4  0x00007ffff7918700 in __GI___chk_fail () at chk_fail.c:29
5  0x00007ffff79179e6 in __strncpy_chk (s1=<optimized out>, 
  s2=<optimized out>, n=<optimized out>, s1len=<optimized out>)
  at strncpy_chk.c:34
6  0x00007ffff7bd12ef in th_finish () from /usr/lib/libtar.so.0
7  0x00007ffff7bd0dc1 in th_write () from /usr/lib/libtar.so.0
8  0x00007ffff7bd07f0 in tar_append_file () from /usr/lib/libtar.so.0
9  0x00007ffff7bd3c12 in tar_append_tree () from /usr/lib/libtar.so.0
10 0x00000000004006f1 in main () at main.c:12
犯错

现在使用“gcc main.c-g3-O0-o run-ltar”

程序收到信号SIGABRT,中止。
0x00007FF7845425英寸GI上升(sig=)
位于../nptl/sysdeps/unix/sysv/linux/raise.c:64
64../nptl/sysdeps/unix/sysv/linux/raise.c:没有这样的文件或目录。
(gdb)英国电信
0 0x00007FF7845425英寸GI上升(sig=)
位于../nptl/sysdeps/unix/sysv/linux/raise.c:64
1 0x00007FF7848B8B位于中止处的中止()中。c:91
2 0x00007FF788339E在\uuuu libc\u消息中(do\u abort=2,
fmt=0x7ffff798ae3f“***%s***:%s终止\n”)
在../sysdeps/unix/sysv/linux/libc_fatal.c:201
3 0x00007FF7919807在GI中加强失败(
msg=0x7ffff798add6“检测到缓冲区溢出”)在fortify_失败。c:32
4 0x00007FF7918700 in_uuuugi_uuuuuchk_fail()在chk_fail处。c:29
5 0x00007FF79179E6英寸(s1=,
s2=,n=,s1len=)
在strncpy_chk.c:34
6 0x00007FF7BD12EF位于/usr/lib/libtar.so.0的th_finish()中
在/usr/lib/libtar.so.0的th_write()中写入7 0x00007ffff7bd0dc1
8 0x00007FF7BD07F0位于/usr/lib/libtar.so.0的tar_append_文件()中
9/usr/lib/libtar.so.0中tar_append_树()中的0x00007ff7bd3c12
main()中的10 0x00000000004006f1位于main.c:12处
所有的例子,这里是f.e


似乎工作正常……

看起来像是库缺陷


您可能需要升级libtar-devel

是否检查了
tar\u-open
调用是否成功?tar\u-open()、tar\u-fdopen()和tar\u-close()函数在成功时返回0。失败时,它们返回-1并设置errno.int rc=tar_open(&pTar,tarFilename,NULL,O_WRONLY | O_CREAT,0644,tar_GNU);printf(“%d”,rc);成功创建的大小为0字节的文件返回0个字节,将在今天进行检查检查检查并解决问题。谢谢!