summaryrefslogtreecommitdiff
path: root/misc/openoffice2
diff options
context:
space:
mode:
authorhira <hira@pkgsrc.org>2008-03-21 09:20:55 +0000
committerhira <hira@pkgsrc.org>2008-03-21 09:20:55 +0000
commit0db1a2df60a47b9b3421289c0b5a839ca37b5898 (patch)
treefc8b23b4b157bb7b99a941fd5289023ef5a6eea6 /misc/openoffice2
parent2ae724aeb28156b7926d2d2fbd0d076e264a2057 (diff)
downloadpkgsrc-0db1a2df60a47b9b3421289c0b5a839ca37b5898.tar.gz
Fix CVE-2007-{4770,4771} (sync with upstream by patch-db).
Bump PKGREVISION. Pointed out by drochner@ in private e-mail.
Diffstat (limited to 'misc/openoffice2')
-rw-r--r--misc/openoffice2/Makefile4
-rw-r--r--misc/openoffice2/distinfo3
-rw-r--r--misc/openoffice2/patches/patch-db948
3 files changed, 952 insertions, 3 deletions
diff --git a/misc/openoffice2/Makefile b/misc/openoffice2/Makefile
index 3665469f678..2f903c81247 100644
--- a/misc/openoffice2/Makefile
+++ b/misc/openoffice2/Makefile
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.39 2008/03/09 12:57:27 joerg Exp $
+# $NetBSD: Makefile,v 1.40 2008/03/21 09:20:55 hira Exp $
#
OO_VER= 2.3.1
-PKGREVISION= 4
+PKGREVISION= 5
DISTNAME= openoffice-${OO_VER}
PKGNAME= openoffice2-${OO_VER}
CATEGORIES= misc
diff --git a/misc/openoffice2/distinfo b/misc/openoffice2/distinfo
index fa29a75d335..bccac44f0a3 100644
--- a/misc/openoffice2/distinfo
+++ b/misc/openoffice2/distinfo
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.34 2008/02/06 16:41:07 hira Exp $
+$NetBSD: distinfo,v 1.35 2008/03/21 09:20:56 hira Exp $
SHA1 (openoffice-2.3.1/OOo_2.3.1_src_binfilter.tar.bz2) = 0643c52da3850a164928342e7651897b7a76ca1f
RMD160 (openoffice-2.3.1/OOo_2.3.1_src_binfilter.tar.bz2) = 497aec1de49ea941ab8305331a9fc9e8e04a5162
@@ -68,3 +68,4 @@ SHA1 (patch-cx) = 1c2efe192b0535ff6b2dc59e6a138c9931e6e946
SHA1 (patch-cy) = 8d47bcf1da6f351f4f0cbf6a8355903094b0baee
SHA1 (patch-cz) = e9850759fccff68914b104f4075e79c61b1010eb
SHA1 (patch-da) = c2c9332dcf22d2d201215813ac9fc7e7ac401c6d
+SHA1 (patch-db) = 2760f1dd5a19afb7e329796318beedfc6972f039
diff --git a/misc/openoffice2/patches/patch-db b/misc/openoffice2/patches/patch-db
new file mode 100644
index 00000000000..6cfc3ee5089
--- /dev/null
+++ b/misc/openoffice2/patches/patch-db
@@ -0,0 +1,948 @@
+$NetBSD: patch-db,v 1.1 2008/03/21 09:20:56 hira Exp $
+
+Fix CVE-2007-4770 and CVE-2007-4771.
+
+--- icu/icu-3.6.patch.orig 2007-10-25 23:01:33.000000000 +0900
++++ icu/icu-3.6.patch 2008-03-21 17:38:36.000000000 +0900
+@@ -1,5 +1,5 @@
+ *** misc/icu/source/common/putil.c Mon Jul 31 20:14:28 2006
+---- misc/build/icu/source/common/putil.c Tue Sep 18 19:30:30 2007
++--- misc/build/icu/source/common/putil.c Mon Jan 28 21:31:50 2008
+ ***************
+ *** 48,54 ****
+ #endif
+@@ -19,7 +19,7 @@
+ #endif
+
+ *** misc/icu/source/common/unicode/pwin32.h Tue Aug 29 23:34:38 2006
+---- misc/build/icu/source/common/unicode/pwin32.h Tue Sep 18 19:30:30 2007
++--- misc/build/icu/source/common/unicode/pwin32.h Mon Jan 28 21:31:50 2008
+ ***************
+ *** 266,273 ****
+ --- 266,278 ----
+@@ -37,10 +37,10 @@
+ /*===========================================================================*/
+ /* Code alignment and C function inlining */
+ *** misc/icu/source/common/unicode/rbbi.h Fri Aug 11 07:46:40 2006
+---- misc/build/icu/source/common/unicode/rbbi.h Tue Sep 18 19:35:01 2007
++--- misc/build/icu/source/common/unicode/rbbi.h Mon Jan 28 21:31:50 2008
+ ***************
+-*** 611,616 ****
+---- 611,617 ----
++*** 611,622 ****
++--- 611,624 ----
+ virtual int32_t getBreakType() const;
+ #endif
+
+@@ -48,9 +48,6 @@
+ /**
+ * Set the type of the break iterator.
+ * @internal
+-***************
+-*** 617,622 ****
+---- 618,624 ----
+ */
+ virtual void setBreakType(int32_t type);
+
+@@ -59,7 +56,7 @@
+ * Common initialization function, used by constructors and bufferClone.
+ * (Also used by DictionaryBasedBreakIterator::createBufferClone().)
+ *** misc/icu/source/common/unicode/umachine.h Tue Feb 7 02:54:16 2006
+---- misc/build/icu/source/common/unicode/umachine.h Tue Sep 18 19:30:30 2007
++--- misc/build/icu/source/common/unicode/umachine.h Mon Jan 28 21:31:50 2008
+ ***************
+ *** 322,328 ****
+ */
+@@ -78,7 +75,7 @@
+ #else
+ typedef uint16_t UChar;
+ *** misc/icu/source/common/unicode/unistr.h Tue Aug 29 23:52:50 2006
+---- misc/build/icu/source/common/unicode/unistr.h Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/common/unicode/unistr.h Mon Jan 28 21:31:50 2008
+ ***************
+ *** 3280,3286 ****
+ //========================================
+@@ -182,7 +179,7 @@
+ }
+
+ *** misc/icu/source/common/unicode/ustring.h Tue Aug 29 23:52:50 2006
+---- misc/build/icu/source/common/unicode/ustring.h Tue Sep 18 19:30:30 2007
++--- misc/build/icu/source/common/unicode/ustring.h Mon Jan 28 21:31:50 2008
+ ***************
+ *** 918,924 ****
+ * </pre>
+@@ -200,8 +197,180 @@
+ # define U_STRING_DECL(var, cs, length) static const wchar_t var[(length)+1]={ L ## cs }
+ /**@stable ICU 2.0 */
+ # define U_STRING_INIT(var, cs, length)
++*** misc/icu/source/common/uvectr32.cpp Wed Aug 27 03:01:30 2003
++--- misc/build/icu/source/common/uvectr32.cpp Mon Jan 28 21:31:51 2008
++***************
++*** 1,6 ****
++ /*
++ ******************************************************************************
++! * Copyright (C) 1999-2003, International Business Machines Corporation and *
++ * others. All Rights Reserved. *
++ ******************************************************************************
++ * Date Name Description
++--- 1,6 ----
++ /*
++ ******************************************************************************
++! * Copyright (C) 1999-2008, International Business Machines Corporation and *
++ * others. All Rights Reserved. *
++ ******************************************************************************
++ * Date Name Description
++***************
++*** 26,31 ****
++--- 26,32 ----
++ UVector32::UVector32(UErrorCode &status) :
++ count(0),
++ capacity(0),
+++ maxCapacity(0),
++ elements(NULL)
++ {
++ _init(DEFUALT_CAPACITY, status);
++***************
++*** 34,39 ****
++--- 35,41 ----
++ UVector32::UVector32(int32_t initialCapacity, UErrorCode &status) :
++ count(0),
++ capacity(0),
+++ maxCapacity(0),
++ elements(0)
++ {
++ _init(initialCapacity, status);
++***************
++*** 46,51 ****
++--- 48,56 ----
++ if (initialCapacity < 1) {
++ initialCapacity = DEFUALT_CAPACITY;
++ }
+++ if (maxCapacity>0 && maxCapacity<initialCapacity) {
+++ initialCapacity = maxCapacity;
+++ }
++ elements = (int32_t *)uprv_malloc(sizeof(int32_t)*initialCapacity);
++ if (elements == 0) {
++ status = U_MEMORY_ALLOCATION_ERROR;
++***************
++*** 189,209 ****
++ UBool UVector32::expandCapacity(int32_t minimumCapacity, UErrorCode &status) {
++ if (capacity >= minimumCapacity) {
++ return TRUE;
++! } else {
++! int32_t newCap = capacity * 2;
++! if (newCap < minimumCapacity) {
++! newCap = minimumCapacity;
++! }
++! int32_t* newElems = (int32_t *)uprv_malloc(sizeof(int32_t)*newCap);
++! if (newElems == 0) {
++! status = U_MEMORY_ALLOCATION_ERROR;
++! return FALSE;
++! }
++! uprv_memcpy(newElems, elements, sizeof(elements[0]) * count);
++! uprv_free(elements);
++! elements = newElems;
++! capacity = newCap;
++! return TRUE;
++ }
++ }
++
++--- 194,228 ----
++ UBool UVector32::expandCapacity(int32_t minimumCapacity, UErrorCode &status) {
++ if (capacity >= minimumCapacity) {
++ return TRUE;
++! }
++! if (maxCapacity>0 && minimumCapacity>maxCapacity) {
++! status = U_BUFFER_OVERFLOW_ERROR;
++! return FALSE;
++! }
++! int32_t newCap = capacity * 2;
++! if (newCap < minimumCapacity) {
++! newCap = minimumCapacity;
++! }
++! if (maxCapacity > 0 && newCap > maxCapacity) {
++! newCap = maxCapacity;
++! }
++! int32_t* newElems = (int32_t *)uprv_malloc(sizeof(int32_t)*newCap);
++! if (newElems == 0) {
++! status = U_MEMORY_ALLOCATION_ERROR;
++! return FALSE;
++! }
++! uprv_memcpy(newElems, elements, sizeof(elements[0]) * count);
++! uprv_free(elements);
++! elements = newElems;
++! capacity = newCap;
++! return TRUE;
++! }
++!
++! void UVector32::setMaxCapacity(int32_t limit) {
++! U_ASSERT(limit >= 0);
++! maxCapacity = limit;
++! if (maxCapacity < 0) {
++! maxCapacity = 0;
++ }
++ }
++
++*** misc/icu/source/common/uvectr32.h Wed Jan 18 04:52:04 2006
++--- misc/build/icu/source/common/uvectr32.h Mon Jan 28 21:31:51 2008
++***************
++*** 1,6 ****
++ /*
++ **********************************************************************
++! * Copyright (C) 1999-2006, International Business Machines
++ * Corporation and others. All Rights Reserved.
++ **********************************************************************
++ */
++--- 1,6 ----
++ /*
++ **********************************************************************
++! * Copyright (C) 1999-2008, International Business Machines
++ * Corporation and others. All Rights Reserved.
++ **********************************************************************
++ */
++***************
++*** 61,66 ****
++--- 61,68 ----
++ int32_t count;
++
++ int32_t capacity;
+++
+++ int32_t maxCapacity; // Limit beyond which capacity is not permitted to grow.
++
++ int32_t* elements;
++
++***************
++*** 162,167 ****
++--- 164,177 ----
++ int32_t *getBuffer() const;
++
++ /**
+++ * Set the maximum allowed buffer capacity for this vector/stack.
+++ * Default with no limit set is unlimited, go until malloc() fails.
+++ * A Limit of zero means unlimited capacity.
+++ * Units are vector elements (32 bits each), not bytes.
+++ */
+++ void setMaxCapacity(int32_t limit);
+++
+++ /**
++ * ICU "poor man's RTTI", returns a UClassID for this class.
++ */
++ static UClassID U_EXPORT2 getStaticClassID();
++***************
++*** 221,227 ****
++ }
++
++ inline int32_t *UVector32::reserveBlock(int32_t size, UErrorCode &status) {
++! ensureCapacity(count+size, status);
++ int32_t *rp = elements+count;
++ count += size;
++ return rp;
++--- 231,239 ----
++ }
++
++ inline int32_t *UVector32::reserveBlock(int32_t size, UErrorCode &status) {
++! if (ensureCapacity(count+size, status) == FALSE) {
++! return NULL;
++! }
++ int32_t *rp = elements+count;
++ count += size;
++ return rp;
+ *** misc/icu/source/config/mh-darwin Wed Feb 1 08:52:42 2006
+---- misc/build/icu/source/config/mh-darwin Tue Sep 18 19:30:30 2007
++--- misc/build/icu/source/config/mh-darwin Mon Jan 28 21:31:51 2008
+ ***************
+ *** 25,31 ****
+ SHLIB.cc= $(CXX) -dynamiclib -dynamic $(CXXFLAGS) $(LDFLAGS)
+@@ -220,7 +389,7 @@
+ ## Compiler switch to embed a runtime search path
+ LD_RPATH=
+ *** misc/icu/source/config/mh-irix Thu Mar 23 19:51:52 2006
+---- misc/build/icu/source/config/mh-irix Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/config/mh-irix Mon Jan 28 21:31:51 2008
+ ***************
+ *** 23,28 ****
+ --- 23,31 ----
+@@ -234,25 +403,26 @@
+ THREADSCPPFLAGS = -D_REENTRANT -D_PTHREADS
+ LIBCPPFLAGS =
+ *** misc/icu/source/config/mh-linux Thu Mar 23 19:51:52 2006
+---- misc/build/icu/source/config/mh-linux Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/config/mh-linux Mon Jan 28 21:31:51 2008
+ ***************
+ *** 20,25 ****
+---- 20,32 ----
++--- 20,33 ----
+ LD_RPATH=
+ LD_RPATH_PRE = -Wl,-rpath,
+
+ + ## Force RPATH=$ORIGIN to locate own dependencies w/o need for LD_LIBRARY_PATH
+++ ## (incl. the C++ runtime libs potentially found in the URE lib dir):
+ + ENABLE_RPATH=YES
+-+ RPATHLDFLAGS=${LD_RPATH_PRE}'$$ORIGIN'
+++ RPATHLDFLAGS=${LD_RPATH_PRE}'$$ORIGIN:$$ORIGIN/../ure-link/lib'
+ +
+ + #SH# ENABLE_RPATH=YES
+-+ #SH# RPATHLDFLAGS="${LD_RPATH_PRE}'$$ORIGIN'"
+++ #SH# RPATHLDFLAGS="${LD_RPATH_PRE}'$$ORIGIN:$$ORIGIN/../ure-link/lib'"
+ +
+ ## These are the library specific LDFLAGS
+ LDFLAGSICUDT=-nodefaultlibs -nostdlib
+
+ *** misc/icu/source/config/mh-mingw Tue Aug 15 10:24:14 2006
+---- misc/build/icu/source/config/mh-mingw Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/config/mh-mingw Mon Jan 28 21:31:51 2008
+ ***************
+ *** 54,59 ****
+ --- 54,62 ----
+@@ -274,16 +444,19 @@
+ # Current full path directory for use in source code in a -D compiler option.
+ CURR_SRCCODE_FULL_DIR=$(subst /,\\\\,$(shell pwd -W))#M#
+
+---- 74,80 ----
++--- 74,83 ----
+
+ # The #M# is used to delete lines for icu-config
+ # Current full path directory.
+ ! CURR_FULL_DIR=$(subst \,/,$(shell cygpath -aw .))#M#
++! SRCDIRW:=$(SRCDIR)
++! SRCDIR:=$(foreach p,$(SRCDIR),$(shell cygpath -u $(subst \,/,$(p))))#M#
++! DATAFILEPATHS:=$(foreach p,$(DATAFILEPATHS),$(shell cygpath -u $(subst \,/,$(p))))#M#
+ # Current full path directory for use in source code in a -D compiler option.
+ CURR_SRCCODE_FULL_DIR=$(subst /,\\\\,$(shell pwd -W))#M#
+
+ *** misc/icu/source/config/mh-solaris Fri Feb 24 20:31:14 2006
+---- misc/build/icu/source/config/mh-solaris Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/config/mh-solaris Mon Jan 28 21:31:51 2008
+ ***************
+ *** 18,34 ****
+
+@@ -330,7 +503,7 @@
+
+ ## Compiler switch to embed a library name
+ *** misc/icu/source/data/Makefile.in Sat Aug 12 00:22:24 2006
+---- misc/build/icu/source/data/Makefile.in Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/data/Makefile.in Mon Jan 28 21:31:51 2008
+ ***************
+ *** 344,350 ****
+ ifneq ($(ICUDATA_SOURCE_IS_NATIVE_TARGET),YES)
+@@ -348,27 +521,195 @@
+ else
+ @echo "$@" > $@
+ endif
+-*** misc/icu/source/i18n/windtfmt.cpp Tue Aug 15 08:48:02 2006
+---- misc/build/icu/source/i18n/windtfmt.cpp Tue Sep 18 19:30:31 2007
++*** misc/icu/source/i18n/regexcmp.cpp Thu Feb 2 05:37:14 2006
++--- misc/build/icu/source/i18n/regexcmp.cpp Mon Jan 28 21:31:51 2008
+ ***************
+-*** 232,238 ****
+- UChar stackBuffer[STACK_BUFFER_SIZE];
+- UChar *buffer = stackBuffer;
++*** 2,8 ****
++ //
++ // file: regexcmp.cpp
++ //
++! // Copyright (C) 2002-2006 International Business Machines Corporation and others.
++ // All Rights Reserved.
++ //
++ // This file contains the ICU regular expression compiler, which is responsible
++--- 2,8 ----
++ //
++ // file: regexcmp.cpp
++ //
++! // Copyright (C) 2002-2008 International Business Machines Corporation and others.
++ // All Rights Reserved.
++ //
++ // This file contains the ICU regular expression compiler, which is responsible
++***************
++*** 1187,1200 ****
++ // Because capture groups can be forward-referenced by back-references,
++ // we fill the operand with the capture group number. At the end
++ // of compilation, it will be changed to the variable's location.
++! U_ASSERT(groupNum > 0);
++! int32_t op;
++! if (fModeFlags & UREGEX_CASE_INSENSITIVE) {
++! op = URX_BUILD(URX_BACKREF_I, groupNum);
++ } else {
++! op = URX_BUILD(URX_BACKREF, groupNum);
++ }
++- fRXPat->fCompiledPat->addElement(op, *fStatus);
++ }
++ break;
+
+-! result = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, buffer, STACK_BUFFER_SIZE);
++--- 1187,1203 ----
++ // Because capture groups can be forward-referenced by back-references,
++ // we fill the operand with the capture group number. At the end
++ // of compilation, it will be changed to the variable's location.
++! if (groupNum < 1) {
++! error(U_REGEX_INVALID_BACK_REF);
++ } else {
++! int32_t op;
++! if (fModeFlags & UREGEX_CASE_INSENSITIVE) {
++! op = URX_BUILD(URX_BACKREF_I, groupNum);
++! } else {
++! op = URX_BUILD(URX_BACKREF, groupNum);
++! }
++! fRXPat->fCompiledPat->addElement(op, *fStatus);
++ }
++ }
++ break;
+
+- if (result == 0) {
+- if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
+---- 232,238 ----
++*** misc/icu/source/i18n/rematch.cpp Thu Aug 25 20:02:20 2005
++--- misc/build/icu/source/i18n/rematch.cpp Mon Jan 28 21:31:51 2008
++***************
++*** 6,12 ****
++ //
++ /*
++ **************************************************************************
++! * Copyright (C) 2002-2005 International Business Machines Corporation *
++ * and others. All rights reserved. *
++ **************************************************************************
++ */
++--- 6,12 ----
++ //
++ /*
++ **************************************************************************
++! * Copyright (C) 2002-2008 International Business Machines Corporation *
++ * and others. All rights reserved. *
++ **************************************************************************
++ */
++***************
++*** 30,35 ****
++--- 30,44 ----
++
++ U_NAMESPACE_BEGIN
++
+++ // Limit the size of the back track stack, to avoid system failures caused
+++ // by heap exhaustion. Units are in 32 bit words, not bytes.
+++ // This value puts ICU's limits higher than most other regexp implementations,
+++ // which use recursion rather than the heap, and take more storage per
+++ // backtrack point.
+++ // This constant is _temporary_. Proper API to control the value will added.
+++ //
+++ static const int32_t BACKTRACK_STACK_CAPACITY = 8000000;
+++
++ //-----------------------------------------------------------------------------
++ //
++ // Constructor and Destructor
++***************
++*** 53,60 ****
++ }
++ if (fStack == NULL || fData == NULL) {
++ fDeferredStatus = U_MEMORY_ALLOCATION_ERROR;
++ }
++-
++ reset(*RegexStaticSets::gStaticSets->fEmptyString);
++ }
++
++--- 62,70 ----
++ }
++ if (fStack == NULL || fData == NULL) {
++ fDeferredStatus = U_MEMORY_ALLOCATION_ERROR;
+++ } else {
+++ fStack->setMaxCapacity(BACKTRACK_STACK_CAPACITY);
++ }
++ reset(*RegexStaticSets::gStaticSets->fEmptyString);
++ }
++
++***************
++*** 78,83 ****
++--- 88,95 ----
++ }
++ if (fStack == NULL || fData == NULL) {
++ status = U_MEMORY_ALLOCATION_ERROR;
+++ } else {
+++ fStack->setMaxCapacity(BACKTRACK_STACK_CAPACITY);
++ }
++ reset(input);
++ }
++***************
++*** 102,107 ****
++--- 114,121 ----
++ }
++ if (fStack == NULL || fData == NULL) {
++ status = U_MEMORY_ALLOCATION_ERROR;
+++ } else {
+++ fStack->setMaxCapacity(BACKTRACK_STACK_CAPACITY);
++ }
++ reset(*RegexStaticSets::gStaticSets->fEmptyString);
++ }
++***************
++*** 1015,1020 ****
++--- 1029,1042 ----
++ inline REStackFrame *RegexMatcher::StateSave(REStackFrame *fp, int32_t savePatIdx, int32_t frameSize, UErrorCode &status) {
++ // push storage for a new frame.
++ int32_t *newFP = fStack->reserveBlock(frameSize, status);
+++ if (newFP == NULL) {
+++ // Heap allocation error on attempted stack expansion.
+++ // We need to return a writable stack frame, so just return the
+++ // previous frame. The match operation will stop quickly
+++ // becuase of the error status, after which the frame will never
+++ // be looked at again.
+++ return fp;
+++ }
++ fp = (REStackFrame *)(newFP - frameSize); // in case of realloc of stack.
++
++ // New stack frame = copy of old top frame.
++***************
++*** 1030,1037 ****
++ fp->fPatIdx = savePatIdx;
++ return (REStackFrame *)newFP;
++ }
++!
++!
++ //--------------------------------------------------------------------------------
++ //
++ // MatchAt This is the actual matching engine.
++--- 1052,1059 ----
++ fp->fPatIdx = savePatIdx;
++ return (REStackFrame *)newFP;
++ }
++!
++!
++ //--------------------------------------------------------------------------------
++ //
++ // MatchAt This is the actual matching engine.
++***************
++*** 2262,2267 ****
++--- 2284,2290 ----
++ }
++
++ if (U_FAILURE(status)) {
+++ isMatch = FALSE;
++ break;
++ }
++ }
++*** misc/icu/source/i18n/windtfmt.cpp Tue Aug 15 08:48:02 2006
++--- misc/build/icu/source/i18n/windtfmt.cpp Mon Jan 28 21:31:51 2008
++***************
++*** 232,249 ****
+ UChar stackBuffer[STACK_BUFFER_SIZE];
+ UChar *buffer = stackBuffer;
+
+-! result = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, reinterpret_cast<LPWSTR>(buffer), STACK_BUFFER_SIZE);
++! result = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, buffer, STACK_BUFFER_SIZE);
+
+ if (result == 0) {
+ if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
+-***************
+-*** 239,249 ****
+ int newLength = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, NULL, 0);
+
+ buffer = NEW_ARRAY(UChar, newLength);
+@@ -380,7 +721,14 @@
+
+ if (buffer != stackBuffer) {
+ DELETE_ARRAY(buffer);
+---- 239,249 ----
++--- 232,249 ----
++ UChar stackBuffer[STACK_BUFFER_SIZE];
++ UChar *buffer = stackBuffer;
++
++! result = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, reinterpret_cast<LPWSTR>(buffer), STACK_BUFFER_SIZE);
++
++ if (result == 0) {
++ if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
+ int newLength = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, NULL, 0);
+
+ buffer = NEW_ARRAY(UChar, newLength);
+@@ -393,7 +741,7 @@
+ if (buffer != stackBuffer) {
+ DELETE_ARRAY(buffer);
+ ***************
+-*** 258,264 ****
++*** 258,275 ****
+ UChar stackBuffer[STACK_BUFFER_SIZE];
+ UChar *buffer = stackBuffer;
+
+@@ -401,16 +749,6 @@
+
+ if (result == 0) {
+ if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
+---- 258,264 ----
+- UChar stackBuffer[STACK_BUFFER_SIZE];
+- UChar *buffer = stackBuffer;
+-
+-! result = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, reinterpret_cast<LPWSTR>(buffer), STACK_BUFFER_SIZE);
+-
+- if (result == 0) {
+- if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
+-***************
+-*** 265,275 ****
+ int newLength = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, NULL, 0);
+
+ buffer = NEW_ARRAY(UChar, newLength);
+@@ -422,7 +760,14 @@
+
+ if (buffer != stackBuffer) {
+ DELETE_ARRAY(buffer);
+---- 265,275 ----
++--- 258,275 ----
++ UChar stackBuffer[STACK_BUFFER_SIZE];
++ UChar *buffer = stackBuffer;
++
++! result = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, reinterpret_cast<LPWSTR>(buffer), STACK_BUFFER_SIZE);
++
++ if (result == 0) {
++ if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
+ int newLength = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, NULL, 0);
+
+ buffer = NEW_ARRAY(UChar, newLength);
+@@ -435,7 +780,7 @@
+ if (buffer != stackBuffer) {
+ DELETE_ARRAY(buffer);
+ *** misc/icu/source/i18n/winnmfmt.cpp Thu Aug 17 07:21:06 2006
+---- misc/build/icu/source/i18n/winnmfmt.cpp Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/i18n/winnmfmt.cpp Mon Jan 28 21:31:51 2008
+ ***************
+ *** 86,95 ****
+ GetLocaleInfoA(lcid, LOCALE_SGROUPING, buf, 10);
+@@ -573,7 +918,7 @@
+ if (buffer != stackBuffer) {
+ DELETE_ARRAY(buffer);
+ *** misc/icu/source/layout/CoverageTables.cpp Sat May 8 01:28:42 2004
+---- misc/build/icu/source/layout/CoverageTables.cpp Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/layout/CoverageTables.cpp Mon Jan 28 21:31:51 2008
+ ***************
+ *** 44,49 ****
+ --- 44,53 ----
+@@ -588,7 +933,7 @@
+ le_uint16 probe = power;
+ le_uint16 index = 0;
+ *** misc/icu/source/layout/DeviceTables.cpp Fri Jan 14 18:25:12 2005
+---- misc/build/icu/source/layout/DeviceTables.cpp Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/layout/DeviceTables.cpp Mon Jan 28 21:31:51 2008
+ ***************
+ *** 22,28 ****
+ le_uint16 format = SWAPW(deltaFormat) - 1;
+@@ -608,7 +953,7 @@
+ le_uint16 bits = fieldBits[format];
+ le_uint16 count = 16 / bits;
+ *** misc/icu/source/layout/GXLayoutEngine.cpp Fri Sep 2 20:22:10 2005
+---- misc/build/icu/source/layout/GXLayoutEngine.cpp Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/layout/GXLayoutEngine.cpp Mon Jan 28 21:31:51 2008
+ ***************
+ *** 39,45 ****
+ return 0;
+@@ -627,7 +972,7 @@
+ if (LE_FAILURE(success)) {
+ return 0;
+ *** misc/icu/source/layout/IndicClassTables.cpp Wed Aug 23 02:12:40 2006
+---- misc/build/icu/source/layout/IndicClassTables.cpp Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/layout/IndicClassTables.cpp Mon Jan 28 21:31:51 2008
+ ***************
+ *** 94,100 ****
+ _dr, _db, _db, _db, _db, _xx, _xx, _l1, _dl, _xx, _xx, _s1, _s2, _vr, _xx, _xx, // 09C0 - 09CF
+@@ -646,14 +991,14 @@
+
+ static const IndicClassTable::CharClass punjCharClasses[] =
+ ***************
+-*** 120,127 ****
+---- 120,140 ----
++*** 120,125 ****
++--- 120,138 ----
+ _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0AE0 - 0AEF
+ };
+
+ + #if 1
+- static const IndicClassTable::CharClass oryaCharClasses[] =
+- {
+++ static const IndicClassTable::CharClass oryaCharClasses[] =
+++ {
+ + _xx, _ma, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _iv, /* 0B00 - 0B0F */
+ + _iv, _xx, _xx, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _ct, _bb, /* 0B10 - 0B1F */
+ + _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _pb, /* 0B20 - 0B2F */
+@@ -664,11 +1009,9 @@
+ + _xx, _bb /* 0B70 - 0B71 */
+ + };
+ + #else
+-+ static const IndicClassTable::CharClass oryaCharClasses[] =
+-+ {
++ static const IndicClassTable::CharClass oryaCharClasses[] =
++ {
+ _xx, _ma, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _iv, // 0B00 - 0B0F
+- _iv, _xx, _xx, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0B10 - 0B1F
+- _ct, _ct, _ct, _ct, _bb, _ct, _ct, _ct, _bb, _xx, _ct, _ct, _bb, _bb, _bb, _pb, // 0B20 - 0B2F
+ ***************
+ *** 131,136 ****
+ --- 144,150 ----
+@@ -763,7 +1106,7 @@
+ //
+ // IndicClassTable addresses
+ *** misc/icu/source/layout/IndicReordering.cpp Tue Apr 25 21:08:12 2006
+---- misc/build/icu/source/layout/IndicReordering.cpp Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/layout/IndicReordering.cpp Mon Jan 28 21:31:51 2008
+ ***************
+ *** 50,55 ****
+ --- 50,63 ----
+@@ -868,7 +1211,7 @@
+ output.writeMbelow();
+ output.writeSMbelow(); // FIXME: there are no SMs in these scripts...
+ *** misc/icu/source/layout/LESwaps.h Thu Jun 23 00:39:36 2005
+---- misc/build/icu/source/layout/LESwaps.h Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/layout/LESwaps.h Mon Jan 28 21:31:51 2008
+ ***************
+ *** 2,7 ****
+ --- 2,8 ----
+@@ -944,7 +1287,7 @@
+ * This class is used to access data which stored in big endian order
+ * regardless of the conventions of the platform. It has been designed
+ *** misc/icu/source/layout/MPreFixups.cpp Sat May 8 01:28:44 2004
+---- misc/build/icu/source/layout/MPreFixups.cpp Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/layout/MPreFixups.cpp Mon Jan 28 21:31:51 2008
+ ***************
+ *** 40,45 ****
+ --- 40,51 ----
+@@ -961,7 +1304,7 @@
+ {
+ for (le_int32 fixup = 0; fixup < fFixupCount; fixup += 1) {
+ *** misc/icu/source/layout/MPreFixups.h Mon Apr 12 20:51:32 2004
+---- misc/build/icu/source/layout/MPreFixups.h Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/layout/MPreFixups.h Mon Jan 28 21:31:51 2008
+ ***************
+ *** 31,36 ****
+ --- 31,38 ----
+@@ -974,10 +1317,10 @@
+ FixupData *fFixupData;
+ le_int32 fFixupCount;
+ *** misc/icu/source/stubdata/Makefile.in Fri Dec 2 11:21:34 2005
+---- misc/build/icu/source/stubdata/Makefile.in Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/stubdata/Makefile.in Mon Jan 28 21:31:51 2008
+ ***************
+-*** 25,31 ****
+---- 25,37 ----
++*** 25,30 ****
++--- 25,36 ----
+ ## Target information
+
+ TARGET_STUBNAME=$(DATA_STUBNAME)
+@@ -985,14 +1328,13 @@
+ + FINAL_SO_TARGET=$(STUBDATA_LIBDIR)$(LIBICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX)$(SO_TARGET_VERSION_MAJOR)$(STUB_SUFFIX).$(SO)
+ + %$(STUB_SUFFIX).$(SO): %$(SO_TARGET_VERSION_MAJOR)$(STUB_SUFFIX).$(SO)
+ + $(RM) $@ && ln $< $@
+-
+-+ endif
+ +
+++ endif
++
+ ifneq ($(ENABLE_STATIC),)
+ TARGET = $(STUBDATA_LIBDIR)$(LIBSICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(A)
+- endif
+ *** misc/icu/source/test/intltest/loctest.cpp Thu Jul 6 03:50:04 2006
+---- misc/build/icu/source/test/intltest/loctest.cpp Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/test/intltest/loctest.cpp Mon Jan 28 21:31:51 2008
+ ***************
+ *** 4,9 ****
+ --- 4,10 ----
+@@ -1003,8 +1345,116 @@
+ #include "loctest.h"
+ #include "unicode/decimfmt.h"
+ #include "unicode/ucurr.h"
++*** misc/icu/source/test/intltest/regextst.cpp Tue Jul 5 20:39:00 2005
++--- misc/build/icu/source/test/intltest/regextst.cpp Mon Jan 28 23:18:47 2008
++***************
++*** 1,6 ****
++ /********************************************************************
++ * COPYRIGHT:
++! * Copyright (c) 2002-2005, International Business Machines Corporation and
++ * others. All Rights Reserved.
++ ********************************************************************/
++
++--- 1,6 ----
++ /********************************************************************
++ * COPYRIGHT:
++! * Copyright (c) 2002-2008, International Business Machines Corporation and
++ * others. All Rights Reserved.
++ ********************************************************************/
++
++***************
++*** 66,71 ****
++--- 66,75 ----
++ case 6: name = "PerlTests";
++ if (exec) PerlTests();
++ break;
+++ case 7: name = "Bug 6149";
+++ if (exec) Bug6149();
+++ break;
+++
++
++
++ default: name = "";
++***************
++*** 1639,1644 ****
++--- 1643,1661 ----
++
++ }
++
+++
+++ // Invalid Back Reference \0
+++ // For ICU 3.8 and earlier
+++ // For ICU versions newer than 3.8, \0 introduces an octal escape.
+++ //
+++ #ifndef _MSC_VER
+++ // erAck: 2008-01-28T23:16+0100 MSVC doesn't digest the escaped backslash and
+++ // mumbles something about
+++ // error C2501: 'regex_err' : missing storage-class or type specifiers
+++ // error C2078: too many initializers
+++ // We're not interested in fixing that deficiency just for a testcase.
+++ REGEX_ERR("(ab)\\0", 1, 6, U_REGEX_INVALID_BACK_REF);
+++ #endif
++
++ //-------------------------------------------------------------------------------
++ //
++***************
++*** 2119,2124 ****
++--- 2136,2161 ----
++ }
++
++
+++ //--------------------------------------------------------------
+++ //
+++ // Bug6149 Verify limits to heap expansion for backtrack stack.
+++ // Use this pattern,
+++ // "(a?){1,}"
+++ // The zero-length match will repeat forever.
+++ // (That this goes into a loop is another bug)
+++ //
+++ //---------------------------------------------------------------
+++ void RegexTest::Bug6149() {
+++ UnicodeString pattern("(a?){1,}");
+++ UnicodeString s("xyz");
+++ uint32_t flags = 0;
+++ UErrorCode status = U_ZERO_ERROR;
+++
+++ RegexMatcher matcher(pattern, s, flags, status);
+++ UBool result = false;
+++ REGEX_ASSERT_FAIL(result=matcher.matches(status), U_BUFFER_OVERFLOW_ERROR);
+++ REGEX_ASSERT(result == FALSE);
+++ }
++
++ #endif /* !UCONFIG_NO_REGULAR_EXPRESSIONS */
++
++*** misc/icu/source/test/intltest/regextst.h Wed Dec 3 07:58:28 2003
++--- misc/build/icu/source/test/intltest/regextst.h Mon Jan 28 21:31:51 2008
++***************
++*** 1,6 ****
++ /********************************************************************
++ * COPYRIGHT:
++! * Copyright (c) 2002-2003, International Business Machines Corporation and
++ * others. All Rights Reserved.
++ ********************************************************************/
++
++--- 1,6 ----
++ /********************************************************************
++ * COPYRIGHT:
++! * Copyright (c) 2002-2008, International Business Machines Corporation and
++ * others. All Rights Reserved.
++ ********************************************************************/
++
++***************
++*** 30,35 ****
++--- 30,36 ----
++ virtual void Extended();
++ virtual void Errors();
++ virtual void PerlTests();
+++ virtual void Bug6149();
++
++ // The following functions are internal to the regexp tests.
++ virtual UBool doRegexLMTest(const char *pat, const char *text, UBool looking, UBool match, int line);
+ *** misc/icu/source/test/intltest/tsputil.cpp Wed Jul 19 00:18:10 2006
+---- misc/build/icu/source/test/intltest/tsputil.cpp Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/test/intltest/tsputil.cpp Mon Jan 28 21:31:51 2008
+ ***************
+ *** 4,9 ****
+ --- 4,10 ----
+@@ -1016,7 +1466,7 @@
+
+ #include <float.h> // DBL_MAX, DBL_MIN
+ *** misc/icu/source/test/intltest/uobjtest.cpp Thu Mar 23 01:54:12 2006
+---- misc/build/icu/source/test/intltest/uobjtest.cpp Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/test/intltest/uobjtest.cpp Mon Jan 28 21:31:51 2008
+ ***************
+ *** 4,9 ****
+ --- 4,10 ----
+@@ -1028,7 +1478,7 @@
+ #include "cmemory.h" // UAlignedMemory
+ #include <string.h>
+ *** misc/icu/source/test/intltest/ustrtest.cpp Tue Dec 28 22:13:54 2004
+---- misc/build/icu/source/test/intltest/ustrtest.cpp Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/test/intltest/ustrtest.cpp Mon Jan 28 21:31:51 2008
+ ***************
+ *** 4,9 ****
+ --- 4,10 ----
+@@ -1040,7 +1490,7 @@
+ #include "unicode/unistr.h"
+ #include "unicode/uchar.h"
+ *** misc/icu/source/tools/icupkg/icupkg.cpp Fri Jul 21 23:17:52 2006
+---- misc/build/icu/source/tools/icupkg/icupkg.cpp Tue Sep 18 19:30:31 2007
++--- misc/build/icu/source/tools/icupkg/icupkg.cpp Mon Jan 28 21:31:51 2008
+ ***************
+ *** 332,337 ****
+ --- 332,341 ----
+@@ -1054,3 +1504,63 @@
+ extern int
+ main(int argc, char *argv[]) {
+ const char *pname, *sourcePath, *destPath, *inFilename, *outFilename, *outComment;
++*** misc/icu/source/tools/pkgdata/make.c Wed Mar 22 09:14:10 2006
++--- misc/build/icu/source/tools/pkgdata/make.c Tue Nov 13 13:03:52 2007
++***************
++*** 172,178 ****
++--- 172,180 ----
++ "MODE=%s\n"
++ "MAKEFILE=%s\n"
++ "ENTRYPOINT=%s\n"
+++ #ifndef __MINGW32__
++ "include %s\n"
+++ #endif
++ "\n\n\n",
++ o->shortName,
++ o->libName,
++***************
++*** 182,189 ****
++--- 184,195 ----
++ o->srcDir,
++ o->mode,
++ o->makeFile,
+++ #ifdef __MINGW32__
+++ o->entryName);
+++ #else
++ o->entryName,
++ o->options);
+++ #endif
++ T_FileStream_writeLine(f, linebuf);
++
++ /* TEMP_PATH and TARG_PATH will be empty if the respective dir is . */
++***************
++*** 233,238 ****
++--- 239,252 ----
++
++ pkg_writeCharListWrap(f, o->filePaths, " ", " \\\n",0);
++
+++ #ifdef __MINGW32__
+++ sprintf(linebuf, "\n"
+++ "include %s\n"
+++ "\n\n\n",
+++ o->options);
+++ T_FileStream_writeLine(f, linebuf);
+++ #endif
+++
++ T_FileStream_writeLine(f, "\n\n\n");
++
++ }
++***************
++*** 396,402 ****
++--- 410,420 ----
++ T_FileStream_writeLine(f, "BASE_OBJECTS=$(NAME)_dat.o\n");
++ T_FileStream_writeLine(f, "\n");
++ T_FileStream_writeLine(f, "$(TEMP_DIR)/$(NAME).dat: $(CMNLIST) $(DATAFILEPATHS)\n");
+++ #ifdef __MINGW32__
+++ T_FileStream_writeLine(f, "\t$(INVOKE) $(GENCMN) -c -e $(ENTRYPOINT) -n $(NAME) -s $(SRCDIRW) -t dat -d $(TEMP_DIR) 0 $(CMNLIST)\n");
+++ #else
++ T_FileStream_writeLine(f, "\t$(INVOKE) $(GENCMN) -c -e $(ENTRYPOINT) -n $(NAME) -s $(SRCDIR) -t dat -d $(TEMP_DIR) 0 $(CMNLIST)\n");
+++ #endif
++ T_FileStream_writeLine(f, "\n");
++ T_FileStream_writeLine(f, "$(TEMP_DIR)/$(NAME)_dat.o : $(TEMP_DIR)/$(NAME).dat\n");
++ T_FileStream_writeLine(f, "\t$(INVOKE) $(GENCCODE) $(GENCCODE_ASSEMBLY) -n $(NAME) -e $(ENTRYPOINT) -d $(TEMP_DIR) $<\n");