components/unzip/patches/06_CVE-2014-8139.2.patch
author Vladimir Marek <Vladimir.Marek@oracle.com>
Wed, 02 Mar 2016 10:35:32 +0100
branchs11u3-sru
changeset 5551 6d32c82eb4f5
permissions -rw-r--r--
22782878 The option -T (Test for Integrity/ on files named *.war fail
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5551
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     1
The fix is taken from http://www.info-zip.org/phpBB3/viewtopic.php?f=7&t=454
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     2
and should be available in next unzip release.
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     3
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     4
--- unzip60/extract.c	Fri Feb 26 07:14:44 2016
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     5
+++ /home/vmarek/extract.c	Mon Feb 22 08:32:56 2016
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     6
@@ -298,7 +298,7 @@
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     7
 #ifndef SFX
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     8
    static ZCONST char Far InconsistEFlength[] = "bad extra-field entry:\n \
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
     9
      EF block length (%u bytes) exceeds remaining EF data (%u bytes)\n";
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    10
-   static ZCONST char Far TooSmallEFlength[] = "bad extra-field entry:\n \
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    11
+   static ZCONST char Far TooSmallEBlength[] = "bad extra-field entry:\n \
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    12
      EF block length (%u bytes) invalid (< %d)\n";
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    13
    static ZCONST char Far InvalidComprDataEAs[] =
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    14
      " invalid compressed data for EAs\n";
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    15
@@ -2035,16 +2035,6 @@
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    16
               ebLen, (ef_len - EB_HEADSIZE)));
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    17
             return PK_ERR;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    18
         }
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    19
-        else if (ebLen < EB_HEADSIZE)
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    20
-        {
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    21
-            /* Extra block length smaller than header length. */
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    22
-            if (uO.qflag)
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    23
-                Info(slide, 1, ((char *)slide, "%-22s ",
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    24
-                  FnFilter1(G.filename)));
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    25
-            Info(slide, 1, ((char *)slide, LoadFarString(TooSmallEFlength),
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    26
-              ebLen, EB_HEADSIZE));
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    27
-            return PK_ERR;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    28
-        }
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    29
 
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    30
         switch (ebID) {
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    31
             case EF_OS2:
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    32
@@ -2171,11 +2161,19 @@
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    33
                 }
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    34
                 break;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    35
             case EF_PKVMS:
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    36
-                if (makelong(ef+EB_HEADSIZE) !=
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    37
+                if (ebLen < 4)
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    38
+                {
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    39
+                    Info(slide, 1,
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    40
+                     ((char *)slide, LoadFarString(TooSmallEBlength),
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    41
+                     ebLen, 4));
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    42
+                }
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    43
+                else if (makelong(ef+EB_HEADSIZE) !=
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    44
                     crc32(CRCVAL_INITIAL, ef+(EB_HEADSIZE+4),
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    45
                           (extent)(ebLen-4)))
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    46
+                {
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    47
                     Info(slide, 1, ((char *)slide,
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    48
                       LoadFarString(BadCRC_EAs)));
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    49
+                }
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    50
                 break;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    51
             case EF_PKW32:
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    52
             case EF_PKUNIX:
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    53
@@ -2230,7 +2228,7 @@
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    54
     ulg eb_ucsize;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    55
     uch *eb_ucptr;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    56
     int r;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    57
-    ush method;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    58
+    ush eb_compr_method;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    59
 
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    60
     if (compr_offset < 4)                /* field is not compressed: */
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    61
         return PK_OK;                    /* do nothing and signal OK */
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    62
@@ -2247,11 +2245,14 @@
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    63
      ((eb_ucsize > 0L) && (eb_size <= (compr_offset + EB_CMPRHEADLEN))))
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    64
         return IZ_EF_TRUNC;             /* no/bad compressed data! */
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    65
 
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    66
-    method = makeword(eb + (EB_HEADSIZE + compr_offset));
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    67
-    if ((method == STORED) && (eb_size - compr_offset != eb_ucsize))
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    68
-	return PK_ERR;			  /* compressed & uncompressed
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    69
-					   * should match in STORED
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    70
-					   * method */
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    71
+    /* 2015-02-10 Mancha(?), Michal Zalewski, Tomas Hoger, SMS.
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    72
+     * For STORE method, compressed and uncompressed sizes must agree.
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    73
+     * http://www.info-zip.org/phpBB3/viewtopic.php?f=7&t=450
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    74
+     */
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    75
+    eb_compr_method = makeword( eb + (EB_HEADSIZE + compr_offset));
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    76
+    if ((eb_compr_method == STORED) &&
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    77
+     (eb_size != compr_offset + EB_CMPRHEADLEN + eb_ucsize))
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    78
+        return PK_ERR;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    79
 
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    80
     if (
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    81
 #ifdef INT_16BIT
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    82
@@ -2523,10 +2524,28 @@
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    83
     __GDEF
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    84
     slinkentry *slnk_entry;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    85
 {
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    86
+    int sts;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    87
     extent ucsize = slnk_entry->targetlen;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    88
     char *linkfname = slnk_entry->fname;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    89
     char *linktarget = (char *)malloc(ucsize+1);
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    90
 
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    91
+#ifdef VMS
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    92
+    static int vms_symlink_works = -1;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    93
+
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    94
+    if (vms_symlink_works < 0)
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    95
+    {
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    96
+        /* Test symlink() with an invalid file name.  If errno comes
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    97
+         * back ENOSYS ("Function not implemented"), then don't try to
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    98
+         * use it below on the symlink placeholder text files.
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
    99
+         */
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   100
+        vms_symlink_works = symlink( "", "?");
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   101
+        if (errno == ENOSYS)
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   102
+            vms_symlink_works = 0;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   103
+        else
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   104
+            vms_symlink_works = 1;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   105
+    }
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   106
+#endif /* def VMS */
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   107
+
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   108
     if (!linktarget) {
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   109
         Info(slide, 0x201, ((char *)slide,
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   110
           LoadFarString(SymLnkWarnNoMem), FnFilter1(linkfname)));
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   111
@@ -2554,11 +2573,29 @@
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   112
         return;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   113
     }
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   114
     fclose(G.outfile);                  /* close "data" file for good... */
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   115
+
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   116
+#ifdef VMS
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   117
+    if (vms_symlink_works == 0)
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   118
+    {
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   119
+        /* Should we be using some UnZip error message function instead
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   120
+         * of perror() (or equivalent) for these "symlink error"
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   121
+         * messages?
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   122
+         */
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   123
+        Info(slide, 0, ((char *)slide, LoadFarString(SymLnkFinish),
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   124
+          FnFilter1(linkfname), FnFilter2(linktarget)));
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   125
+
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   126
+        fprintf( stderr, "Symlink error: %s\n", strerror( ENOSYS));
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   127
+        free(linktarget);
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   128
+        return;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   129
+    }
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   130
+#endif /* def VMS */
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   131
+
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   132
     unlink(linkfname);                  /* ...and delete it */
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   133
-    if (QCOND2)
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   134
+    sts = symlink(linktarget, linkfname);       /* create the real link */
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   135
+    if (QCOND2 || (sts != 0))
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   136
         Info(slide, 0, ((char *)slide, LoadFarString(SymLnkFinish),
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   137
           FnFilter1(linkfname), FnFilter2(linktarget)));
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   138
-    if (symlink(linktarget, linkfname))  /* create the real link */
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   139
+    if (sts != 0)
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   140
         perror("symlink error");
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   141
     free(linktarget);
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   142
 #ifdef SET_SYMLINK_ATTRIBS
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   143
@@ -2652,7 +2689,7 @@
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   144
 #endif /* ?HAVE_WORKING_ISPRINT */
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   145
         } else {
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   146
 #ifdef _MBCS
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   147
-            unsigned i = CLEN(r);
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   148
+            extent i = CLEN(r);
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   149
             if (se != NULL && (s > (space + (size-i-2)))) {
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   150
                 have_overflow = TRUE;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   151
                 break;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   152
@@ -2835,7 +2872,7 @@
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   153
 #endif
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   154
 
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   155
     G.inptr = (uch *)bstrm.next_in;
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   156
-    G.incnt = (G.inbuf + INBUFSIZ) - G.inptr;  /* reset for other routines */
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   157
+    G.incnt = (int)((G.inbuf + INBUFSIZ) - G.inptr);  /* Reset for others. */
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   158
 
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   159
 uzbunzip_cleanup_exit:
6d32c82eb4f5 22782878 The option -T (Test for Integrity/ on files named *.war fail
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff changeset
   160
     err = BZ2_bzDecompressEnd(&bstrm);