Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Bug in xbps-create when a relative symlink point to an absolute symlink

Đang mở
#435 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
38/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
c
Lĩnh vực
cli, tooling

Hướng nghiên cứu

Start by running the supplied reproduction script and inspect xbps-create's symlink handling around readlink and realpath. Compare the generated files.plist with the package contents, then verify that the corrected metadata lets xbps-remove remove both symlinks without truncating the target path.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

bug

Simple script to reproduce

#! /bin/sh

set -e

PKGVER=bug-1_1
ARCH=x86_64
DESC="Package to show a bug in xbps-create"

DESTDIR=/tmp/bug-1

mkdir -p $DESTDIR/etc/A
ln -s /etc/os-release $DESTDIR/etc/abs
ln -s ../abs $DESTDIR/etc/A/rel

xbps-create --arch "$ARCH" --desc "$DESC" --pkgver "$PKGVER" $DESTDIR

After running this script you'll end up with a badly formed package. Contents are ok:

$ tar tvf bug-1_1.x86_64.xbps
-rw-r--r-- root/root       503 1969-12-31 21:00 ./props.plist
-rw-r--r-- root/root       744 1969-12-31 21:00 ./files.plist
lrwxrwxrwx 0/0               0 2021-11-28 20:06 ./etc/abs -> /etc/os-release
lrwxrwxrwx 0/0               0 2021-11-28 20:06 ./etc/A/rel -> ../abs

But files.plist is wrong:

$ tar xOf bug-1_1.x86_64.xbps ./files.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>dirs</key>
	<array>
		<dict>
			<key>file</key>
			<string>/etc</string>
		</dict>
		<dict>
			<key>file</key>
			<string>/etc/A</string>
		</dict>
	</array>
	<key>links</key>
	<array>
		<dict>
			<key>file</key>
			<string>/etc/A/rel</string>
			<key>mtime</key>
			<integer>1638140801</integer>
			<key>target</key>
			<string>lease</string>
		</dict>
		<dict>
			<key>file</key>
			<string>/etc/abs</string>
			<key>mtime</key>
			<integer>1638140801</integer>
			<key>target</key>
			<string>/etc/os-release</string>
		</dict>
	</array>
</dict>
</plist>

What is going on I think is:

  • the file in destdir /etc/A/rel is a symlink and readlink gives ../abs which is understood to be relative since it starts with .
  • the filename is then canonicalized (using realpath) to /etc/os-release
  • since the symlink was thought to be relative, this is expected to be inside destdir
  • hence we drop the destdir prefix /tmp/bug-1, that's 10 characters so /etc/os-release minus 10 characters gives lease

This actually bit us in the wip sagemath package. The net result is that those symlinks that are badly reported in files.plistare not removed by xbps-remove.

I've since made a workaround in the sagemath package so this won't affect us, but it'd be nice to fix this logic (whiich is kind of hard to understand), at the very least check that the prefix for the link is indeed the destdir before droping it naively and complain if not.

All of this is affected by whether the canonicalized path is actually an existing file; that's why I chose /etc/os-release which should always exist (if this file is not there, the bug doesn't trigger).

Ngôn ngữ chính
C
Star
1.2k
Fork
152
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của void-linux/xbps

Tất cả issue của void-linux/xbps

Issue tương tự

Thêm issue về C

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.