You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ph...@apache.org on 2018/06/15 14:52:05 UTC
svn commit: r1833601 - in /subversion/trunk: ./ subversion/tests/afl/
subversion/tests/afl/afl-svndiff-testcase/
Author: philip
Date: Fri Jun 15 14:52:05 2018
New Revision: 1833601
URL: http://svn.apache.org/viewvc?rev=1833601&view=rev
Log:
Add a fuzzing test for svn_txdelta_parse_svndiff(). No issue found so far.
* build.conf: Add afl-svndiff
* subversion/tests/afl/afl-svndiff.c: New.
* subversion/tests/afl/afl-svndiff-testcase/: New.
* subversion/tests/afl/afl-svndiff-testcase/test1: New.
* subversion/tests/afl/afl-svndiff-testcase/test2: New.
* subversion/tests/afl/afl-svndiff-testcase/test3: New.
Added:
subversion/trunk/subversion/tests/afl/afl-svndiff-testcase/
subversion/trunk/subversion/tests/afl/afl-svndiff-testcase/test1 (with props)
subversion/trunk/subversion/tests/afl/afl-svndiff-testcase/test2 (with props)
subversion/trunk/subversion/tests/afl/afl-svndiff-testcase/test3 (with props)
subversion/trunk/subversion/tests/afl/afl-svndiff.c (with props)
Modified:
subversion/trunk/build.conf
Modified: subversion/trunk/build.conf
URL: http://svn.apache.org/viewvc/subversion/trunk/build.conf?rev=1833601&r1=1833600&r2=1833601&view=diff
==============================================================================
--- subversion/trunk/build.conf (original)
+++ subversion/trunk/build.conf Fri Jun 15 14:52:05 2018
@@ -1588,7 +1588,7 @@ libs = __ALL__
conflict-data-test db-test pristine-store-test entries-compat-test
op-depth-test dirent_uri-test wc-queries-test wc-test
auth-test
- parse-diff-test x509-test xml-test afl-x509 compress-test
+ parse-diff-test x509-test xml-test afl-x509 afl-svndiff compress-test
svndiff-stream-test
[__MORE__]
@@ -1749,3 +1749,12 @@ sources = afl-x509.c
install = test
libs = libsvn_subr apr
testing = skip
+
+[afl-svndiff]
+description = AFL fuzzer for svndiff to txdelta parser
+type = exe
+path = subversion/tests/afl
+sources = afl-svndiff.c
+install = test
+libs = libsvn_delta libsvn_subr apr
+testing = skip
Added: subversion/trunk/subversion/tests/afl/afl-svndiff-testcase/test1
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/afl/afl-svndiff-testcase/test1?rev=1833601&view=auto
==============================================================================
Binary file - no diff available.
Propchange: subversion/trunk/subversion/tests/afl/afl-svndiff-testcase/test1
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: subversion/trunk/subversion/tests/afl/afl-svndiff-testcase/test2
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/afl/afl-svndiff-testcase/test2?rev=1833601&view=auto
==============================================================================
Binary file - no diff available.
Propchange: subversion/trunk/subversion/tests/afl/afl-svndiff-testcase/test2
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: subversion/trunk/subversion/tests/afl/afl-svndiff-testcase/test3
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/afl/afl-svndiff-testcase/test3?rev=1833601&view=auto
==============================================================================
Binary file - no diff available.
Propchange: subversion/trunk/subversion/tests/afl/afl-svndiff-testcase/test3
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: subversion/trunk/subversion/tests/afl/afl-svndiff.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/afl/afl-svndiff.c?rev=1833601&view=auto
==============================================================================
--- subversion/trunk/subversion/tests/afl/afl-svndiff.c (added)
+++ subversion/trunk/subversion/tests/afl/afl-svndiff.c Fri Jun 15 14:52:05 2018
@@ -0,0 +1,85 @@
+/*
+ * afl-svndiff.c an American Fuzz Lop test
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ */
+
+/* The input data can either be a file on disk or provided via stdin:
+
+ afl-svndiff some-file
+ afl-svndiff < some-file
+
+ In practice the file simply contains random binary data. The data
+ are interpreted as an svndiff as sent by a client to the server. */
+
+#include "svn_delta.h"
+#include "svn_cmdline.h"
+#include "svn_pools.h"
+#include "svn_io.h"
+
+#include <stdlib.h>
+
+static svn_error_t *
+txdelta_window_handler(svn_txdelta_window_t *window,
+ void *baton)
+{
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+parse(const char *filename, apr_pool_t *pool)
+{
+ svn_stringbuf_t *buf;
+ svn_stream_t *svndiff;
+ svn_stream_t *stream;
+
+ SVN_ERR(svn_stringbuf_from_file2(&buf, filename, pool));
+ svndiff = svn_stream_from_stringbuf(buf, pool);
+
+ stream = svn_txdelta_parse_svndiff(txdelta_window_handler, NULL, TRUE, pool);
+ SVN_ERR(svn_stream_copy3(svndiff, stream, NULL, NULL, pool));
+
+ return SVN_NO_ERROR;
+}
+
+int main(int argc, char **argv)
+{
+ apr_pool_t *pool;
+ int exit_code = EXIT_SUCCESS;
+ svn_error_t *err;
+ const char *filename;
+
+ if (argc == 2)
+ filename = argv[1];
+ else
+ filename = "-";
+
+ if (svn_cmdline_init("afl-svndiff", stderr) != EXIT_SUCCESS)
+ return EXIT_FAILURE;
+ pool = apr_allocator_owner_get(svn_pool_create_allocator(FALSE));
+
+ err = parse(filename, pool);
+ if (err)
+ exit_code = EXIT_FAILURE;
+ svn_error_clear(err);
+ svn_pool_destroy(pool);
+ return exit_code;
+}
Propchange: subversion/trunk/subversion/tests/afl/afl-svndiff.c
------------------------------------------------------------------------------
svn:eol-style = native