SHA256
3
0
forked from pool/patch
OBS User unknown 2007-11-02 09:40:24 +00:00 committed by Git OBS Bridge
parent eb1f8528c1
commit 3aeedafe31
3 changed files with 116 additions and 21 deletions

87
fix-partial-context.diff Normal file
View File

@ -0,0 +1,87 @@
From: Andreas Gruenbacher <agruen@suse.de>
Subject: Patch fails to apply hunks with asymmetric context correctly
Patch assumes that hunks with fewer context lines at the top than at the bottom
can only match at the beginning of the file, and hunks with fewer lines at the
bottom can only match at the end. The result is that patches with such hunks
will only apply with fuzz N if the prefix context is N lines longer or shorter
than the suffix context. This makes no sense; hunks with asymmetric context
are perfectly valid.
---
ChangeLog | 7 +++++++
patch.c | 43 ++++---------------------------------------
2 files changed, 11 insertions(+), 39 deletions(-)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-11-02 Andreas Gruenbacher <agruen@suse.de>
+
+ * patch.c (locate_hunk): Hunks that have fewer or more lines of
+ context at the beginning than at the end can match anywhere; the
+ assumption that this can only occur at the beginning or end of the
+ file is wrong.
+
2003-05-20 Paul Eggert <eggert@twinsun.com>
* NEWS, configure.ac (AC_INIT): Version 2.5.9 released.
--- a/patch.c
+++ b/patch.c
@@ -849,10 +849,10 @@ locate_hunk (LINENUM fuzz)
LINENUM pat_lines = pch_ptrn_lines();
LINENUM prefix_context = pch_prefix_context ();
LINENUM suffix_context = pch_suffix_context ();
- LINENUM context = (prefix_context < suffix_context
- ? suffix_context : prefix_context);
- LINENUM prefix_fuzz = fuzz + prefix_context - context;
- LINENUM suffix_fuzz = fuzz + suffix_context - context;
+ LINENUM prefix_fuzz = (prefix_context < fuzz
+ ? prefix_context : fuzz);
+ LINENUM suffix_fuzz = (suffix_context < fuzz
+ ? suffix_context : fuzz);
LINENUM max_where = input_lines - (pat_lines - suffix_fuzz) + 1;
LINENUM min_where = last_frozen_line + 1 - (prefix_context - prefix_fuzz);
LINENUM max_pos_offset = max_where - first_guess;
@@ -867,41 +867,6 @@ locate_hunk (LINENUM fuzz)
if (first_guess <= max_neg_offset)
max_neg_offset = first_guess - 1;
- if (prefix_fuzz < 0)
- {
- /* Can only match start of file. */
-
- if (suffix_fuzz < 0)
- /* Can only match entire file. */
- if (pat_lines != input_lines || prefix_context < last_frozen_line)
- return 0;
-
- offset = 1 - first_guess;
- if (last_frozen_line <= prefix_context
- && offset <= max_pos_offset
- && patch_match (first_guess, offset, (LINENUM) 0, suffix_fuzz))
- {
- last_offset += offset;
- return first_guess + offset;
- }
- else
- return 0;
- }
-
- if (suffix_fuzz < 0)
- {
- /* Can only match end of file. */
- offset = first_guess - (input_lines - pat_lines + 1);
- if (offset <= max_neg_offset
- && patch_match (first_guess, -offset, prefix_fuzz, (LINENUM) 0))
- {
- last_offset -= offset;
- return first_guess - offset;
- }
- else
- return 0;
- }
-
for (offset = 0; offset <= max_offset; offset++) {
char numbuf0[LINENUM_LENGTH_BOUND + 1];
char numbuf1[LINENUM_LENGTH_BOUND + 1];

View File

@ -1,3 +1,8 @@
-------------------------------------------------------------------
Fri Nov 2 01:57:03 CET 2007 - agruen@suse.de
- Patch fails to apply hunks with asymmetric context correctly.
-------------------------------------------------------------------
Wed Jan 25 21:30:47 CET 2006 - mls@suse.de

View File

@ -1,32 +1,33 @@
#
# spec file for package patch (Version 2.5.9)
#
# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany.
# Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
# package are under the same license as the package itself.
#
# Please submit bugfixes or comments via http://bugs.opensuse.org
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
# norootforbuild
Name: patch
License: GPL
Group: Productivity/Text/Utilities
Autoreqprov: on
Version: 2.5.9
Release: 149
Summary: GNU patch
Source: ftp://prep.ai.mit.edu/pub/gnu/patch/%{name}-%{version}.tar.bz2
URL: http://www.gnu.org/software/patch/patch.html
Patch: trailing-cr-fix.diff
Patch1: remember-backup-files.diff
Patch2: unified-reject-files.diff
Patch3: global-reject-file.diff
Patch4: if_else_endif_comments.diff
Patch5: patch-2.5.9-cat_if_device.diff
Patch6: patch-man-unified-reject.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Name: patch
License: GPL v2 or later
Group: Productivity/Text/Utilities
AutoReqProv: on
Version: 2.5.9
Release: 223
Summary: GNU patch
Source: ftp://prep.ai.mit.edu/pub/gnu/patch/%{name}-%{version}.tar.bz2
Url: http://www.gnu.org/software/patch/patch.html
Patch: trailing-cr-fix.diff
Patch1: remember-backup-files.diff
Patch2: unified-reject-files.diff
Patch3: global-reject-file.diff
Patch4: if_else_endif_comments.diff
Patch5: patch-2.5.9-cat_if_device.diff
Patch6: patch-man-unified-reject.diff
Patch7: fix-partial-context.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description
The GNU patch program is used to apply diffs between original and
@ -48,6 +49,7 @@ Authors:
%patch3 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%build
aclocal --acdir=m4
@ -71,8 +73,9 @@ make install \
%doc NEWS README
/usr/bin/patch
%doc %{_mandir}/man1/patch.1.gz
%changelog -n patch
%changelog
* Fri Nov 02 2007 - agruen@suse.de
- Patch fails to apply hunks with asymmetric context correctly.
* Wed Jan 25 2006 - mls@suse.de
- converted neededforbuild to BuildRequires
* Thu Jan 12 2006 - agruen@suse.de