summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukas Fleischer <lfleischer@archlinux.org>2016-10-11 08:09:21 +0200
committerLukas Fleischer <lfleischer@archlinux.org>2016-10-11 08:36:40 +0200
commit1492444ecbe68e4498a6f7ae0258c39ebbd47138 (patch)
tree6fcfb821edf48b10e4c030c72422e70cc9bee280
parent0dce4c4bcabec79ae796d38c3c93d424a42f718c (diff)
downloadaur-1492444ecbe68e4498a6f7ae0258c39ebbd47138.tar.gz
aur-1492444ecbe68e4498a6f7ae0258c39ebbd47138.tar.xz
Make URL columns 8000 characters wide
According to RFC 7230, URLs can be up too 8000 characters long. Resize all URL fields accordingly. Also, add a test to verify that URLs with more than 8000 characters are rejected by the update hook. Reported-by: Andreas Linz <klingt.net@gmail.com> Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
-rwxr-xr-xaurweb/git/update.py5
-rw-r--r--schema/aur-schema.sql4
-rwxr-xr-xtest/t1300-git-update.sh16
-rw-r--r--upgrading/4.4.0.txt12
4 files changed, 33 insertions, 4 deletions
diff --git a/aurweb/git/update.py b/aurweb/git/update.py
index 73373410..af2dfed8 100755
--- a/aurweb/git/update.py
+++ b/aurweb/git/update.py
@@ -324,8 +324,9 @@ def main():
die_commit('invalid package name: {:s}'.format(
pkginfo['pkgname']), str(commit.id))
- for field in ('pkgname', 'pkgdesc', 'url'):
- if field in pkginfo and len(pkginfo[field]) > 255:
+ max_len = {'pkgname': 255, 'pkgdesc': 255, 'url': 8000}
+ for field in max_len.keys():
+ if field in pkginfo and len(pkginfo[field]) > max_len[field]:
die_commit('{:s} field too long: {:s}'.format(field,
pkginfo[field]), str(commit.id))
diff --git a/schema/aur-schema.sql b/schema/aur-schema.sql
index 030370b7..30209bd8 100644
--- a/schema/aur-schema.sql
+++ b/schema/aur-schema.sql
@@ -119,7 +119,7 @@ CREATE TABLE Packages (
Name VARCHAR(255) NOT NULL,
Version VARCHAR(255) NOT NULL DEFAULT '',
Description VARCHAR(255) NULL DEFAULT NULL,
- URL VARCHAR(255) NULL DEFAULT NULL,
+ URL VARCHAR(8000) NULL DEFAULT NULL,
PRIMARY KEY (ID),
UNIQUE (Name),
FOREIGN KEY (PackageBaseID) REFERENCES PackageBases(ID) ON DELETE CASCADE
@@ -227,7 +227,7 @@ CREATE INDEX RelationsRelName ON PackageRelations (RelName);
--
CREATE TABLE PackageSources (
PackageID INTEGER UNSIGNED NOT NULL,
- Source VARCHAR(255) NOT NULL DEFAULT "/dev/null",
+ Source VARCHAR(8000) NOT NULL DEFAULT "/dev/null",
SourceArch VARCHAR(255) NULL DEFAULT NULL,
FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE
) ENGINE = InnoDB;
diff --git a/test/t1300-git-update.sh b/test/t1300-git-update.sh
index b642089c..abab7ead 100755
--- a/test/t1300-git-update.sh
+++ b/test/t1300-git-update.sh
@@ -309,6 +309,22 @@ test_expect_success 'Pushing .SRCINFO with invalid epoch.' '
grep -q "^error: invalid epoch: !$" actual
'
+test_expect_success 'Pushing .SRCINFO with too long URL.' '
+ old=$(git -C aur.git rev-parse HEAD) &&
+ url="http://$(printf "%7993s" x | sed "s/ /x/g")/" &&
+ test_when_finished "git -C aur.git reset --hard $old" &&
+ (
+ cd aur.git &&
+ sed "s#.*url.*#\\0\\nurl = $url#" .SRCINFO >.SRCINFO.new
+ mv .SRCINFO.new .SRCINFO
+ git commit -q -am "Change URL"
+ ) &&
+ new=$(git -C aur.git rev-parse HEAD) &&
+ AUR_USER=user AUR_PKGBASE=foobar AUR_PRIVILEGED=0 \
+ test_must_fail "$GIT_UPDATE" refs/heads/master "$old" "$new" >actual 2>&1 &&
+ grep -q "^error: url field too long: $url\$" actual
+'
+
test_expect_success 'Missing install file.' '
old=$(git -C aur.git rev-parse HEAD) &&
test_when_finished "git -C aur.git reset --hard $old" &&
diff --git a/upgrading/4.4.0.txt b/upgrading/4.4.0.txt
new file mode 100644
index 00000000..1cc55b32
--- /dev/null
+++ b/upgrading/4.4.0.txt
@@ -0,0 +1,12 @@
+1. Resize the URL column of the Packages table:
+
+----
+ALTER TABLE Packages MODIFY URL VARCHAR(8000) NULL DEFAULT NULL;
+----
+
+2. Resize the Source column of the PackageSources table:
+
+----
+ALTER TABLE PackageSources
+ MODIFY Source VARCHAR(8000) NOT NULL DEFAULT "/dev/null";
+----