You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by br...@apache.org on 2015/06/17 12:25:48 UTC

svn commit: r1685988 - in /apr/apr/branches/1.5.x: ./ CHANGES file_io/win32/filepath.c test/testnames.c

Author: brane
Date: Wed Jun 17 10:25:48 2015
New Revision: 1685988

URL: http://svn.apache.org/r1685988
Log:
Merged r1685929 from trunk:

apr_filepath_merge: Fix truename length calculation on Windows
in cases where the "short" name variant is actually longer than
the "long" or "true" name.

Modified:
    apr/apr/branches/1.5.x/   (props changed)
    apr/apr/branches/1.5.x/CHANGES
    apr/apr/branches/1.5.x/file_io/win32/filepath.c
    apr/apr/branches/1.5.x/test/testnames.c

Propchange: apr/apr/branches/1.5.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Jun 17 10:25:48 2015
@@ -1,4 +1,4 @@
 /apr/apr/branches/1.4.x:1003369,1101301
 /apr/apr/branches/1.6.x:1593600,1593612,1648831,1666812
-/apr/apr/trunk:733052,739635,746310,747990,748080,748361,748371,748565,748888,748902,748988,749810,760443,767895,775683,782838,783398,783958,784633,784773,788588,789050,793192-793193,794118,794485,795267,799497,800627,809745,809854,810472,811455,813063,821306,829490,831641,832904,835607,888669,892028,892159,892909,896382,896653,908427,910419,910597,917819,917837-917838,925965,929796,931973,951771,960665,960671,979891,983618,989450,990435,1003338,1044440,1044447,1055657,1072165,1078845,1081462,1081495,1083038,1083242,1084662,1086695,1088023,1089031,1089129,1089438,1099348,1103310,1183683,1183685-1183686,1183688,1183693,1183698,1213382,1235047,1236970,1237078,1237507,1240472,1340286,1340288,1340470,1341193,1341196,1343233,1343243,1367050,1368819,1370494,1372018,1372022,1372093,1372849,1376957,1384764,1389077,1400200,1402868,1405985,1406690,1420106,1420109,1425356,1428809,1438940,1438958,1442903,1449568,1456418,1459994,1460179,1460241,1460399,1460405,1462738,1462813,1470186,1470348,147
 5509,1478905,1480067,1481262,1481265,1484271,1487796,1489517,1496407,1502804,1510354,1516261,1523384,1523479,1523484,1523505,1523521,1523604,1523613,1523615,1523844-1523845,1523853,1524014,1524031,1528797,1528809,1529488,1529495,1529515,1529521,1529668,1530786,1530800,1530988,1531554,1531768,1531884,1532022,1533104,1533111,1533979,1535027,1535157,1536744,1538171,1539374,1539389,1539455,1539603,1541054,1541061,1541486,1541655,1541666,1541744,1542601,1542779,1543033,1543056,1548575,1550907,1551650,1551659,1558905,1559382,1559873,1559975,1561260,1561265,1561321,1561347,1561356,1561361,1561394,1561555,1571894,1575509,1578420,1587063,1587545,1589982,1593611,1604596,1604598,1610854,1611004,1611023,1611107,1611110,1611120,1611125,1611184,1611193,1611466,1626564,1634615,1642159,1648830,1664406,1664447,1664451,1664471,1664769,1664775,1664904,1664911,1664958,1666341,1666411,1666458,1666611,1667914-1667916,1671329,1671356,1671514,1672354,1672366,1672495,1672575,1675644,1675656,1675668,1676013
+/apr/apr/trunk:733052,739635,746310,747990,748080,748361,748371,748565,748888,748902,748988,749810,760443,767895,775683,782838,783398,783958,784633,784773,788588,789050,793192-793193,794118,794485,795267,799497,800627,809745,809854,810472,811455,813063,821306,829490,831641,832904,835607,888669,892028,892159,892909,896382,896653,908427,910419,910597,917819,917837-917838,925965,929796,931973,951771,960665,960671,979891,983618,989450,990435,1003338,1044440,1044447,1055657,1072165,1078845,1081462,1081495,1083038,1083242,1084662,1086695,1088023,1089031,1089129,1089438,1099348,1103310,1183683,1183685-1183686,1183688,1183693,1183698,1213382,1235047,1236970,1237078,1237507,1240472,1340286,1340288,1340470,1341193,1341196,1343233,1343243,1367050,1368819,1370494,1372018,1372022,1372093,1372849,1376957,1384764,1389077,1400200,1402868,1405985,1406690,1420106,1420109,1425356,1428809,1438940,1438958,1442903,1449568,1456418,1459994,1460179,1460241,1460399,1460405,1462738,1462813,1470186,1470348,147
 5509,1478905,1480067,1481262,1481265,1484271,1487796,1489517,1496407,1502804,1510354,1516261,1523384,1523479,1523484,1523505,1523521,1523604,1523613,1523615,1523844-1523845,1523853,1524014,1524031,1528797,1528809,1529488,1529495,1529515,1529521,1529668,1530786,1530800,1530988,1531554,1531768,1531884,1532022,1533104,1533111,1533979,1535027,1535157,1536744,1538171,1539374,1539389,1539455,1539603,1541054,1541061,1541486,1541655,1541666,1541744,1542601,1542779,1543033,1543056,1548575,1550907,1551650,1551659,1558905,1559382,1559873,1559975,1561260,1561265,1561321,1561347,1561356,1561361,1561394,1561555,1571894,1575509,1578420,1587063,1587545,1589982,1593611,1604596,1604598,1610854,1611004,1611023,1611107,1611110,1611120,1611125,1611184,1611193,1611466,1626564,1634615,1642159,1648830,1664406,1664447,1664451,1664471,1664769,1664775,1664904,1664911,1664958,1666341,1666411,1666458,1666611,1667914-1667916,1671329,1671356,1671514,1672354,1672366,1672495,1672575,1675644,1675656,1675668,1676013,
 1685929
 /apr/apr/trunk/test/testnames.c:1460405

Modified: apr/apr/branches/1.5.x/CHANGES
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.5.x/CHANGES?rev=1685988&r1=1685987&r2=1685988&view=diff
==============================================================================
--- apr/apr/branches/1.5.x/CHANGES [utf-8] (original)
+++ apr/apr/branches/1.5.x/CHANGES [utf-8] Wed Jun 17 10:25:48 2015
@@ -1,6 +1,10 @@
                                                      -*- coding: utf-8 -*-
 Changes for APR 1.5.3
 
+  *) apr_filepath_merge: Fix truename length calculation on Windows
+     in cases where the "short" name variant is actually longer than
+     the "long" or "true" name. See: testnames.c:merge_shortname().
+     [Bert Huijben <rhuijben a.o>]
 
 Changes for APR 1.5.2
 

Modified: apr/apr/branches/1.5.x/file_io/win32/filepath.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.5.x/file_io/win32/filepath.c?rev=1685988&r1=1685987&r2=1685988&view=diff
==============================================================================
--- apr/apr/branches/1.5.x/file_io/win32/filepath.c (original)
+++ apr/apr/branches/1.5.x/file_io/win32/filepath.c Wed Jun 17 10:25:48 2015
@@ -890,9 +890,9 @@ APR_DECLARE(apr_status_t) apr_filepath_m
                             memmove(path + keptlen + namelen + 1,
                                    path + keptlen + seglen + 1,
                                    pathlen - keptlen - seglen);
-                            pathlen += namelen - seglen;
-                            seglen = namelen;
                         }
+                        pathlen += namelen - seglen;
+                        seglen = namelen;
                     }
                     else { /* namelen > seglen */
                         if (pathlen + namelen - seglen >= sizeof(path))

Modified: apr/apr/branches/1.5.x/test/testnames.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.5.x/test/testnames.c?rev=1685988&r1=1685987&r2=1685988&view=diff
==============================================================================
--- apr/apr/branches/1.5.x/test/testnames.c (original)
+++ apr/apr/branches/1.5.x/test/testnames.c Wed Jun 17 10:25:48 2015
@@ -214,6 +214,39 @@ static void merge_lowercasedrive(abts_ca
 
   ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
 }
+
+static void merge_shortname(abts_case *tc, void *data)
+{
+  apr_status_t rv;
+  char *long_path;
+  char short_path[MAX_PATH+1];
+  DWORD short_len;
+  char *result_path;
+
+  /* 'A b.c' is not a valid short path, so will have multiple representations
+     when short path name generation is enabled... but its 'short' path will
+     most likely be longer than the long path */
+  rv = apr_dir_make_recursive("C:/data/short/A b.c",
+                              APR_UREAD | APR_UWRITE | APR_UEXECUTE, p);
+  ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+
+  rv = apr_filepath_merge(&long_path, NULL, "C:/data/short/A b.c",
+                          APR_FILEPATH_NOTRELATIVE, p);
+  ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+
+  short_len = GetShortPathName(long_path, short_path, sizeof(short_path));
+  if (short_len > MAX_PATH)
+    return; /* Unable to test. Impossible shortname */
+
+  if (! strcmp(long_path, short_path))
+    return; /* Unable to test. 8dot3name option is probably not enabled */
+
+  rv = apr_filepath_merge(&result_path, "", short_path, APR_FILEPATH_TRUENAME,
+                          p);
+  ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+
+  ABTS_STR_EQUAL(tc, long_path, result_path);
+}
 #endif
 
 static void root_absolute(abts_case *tc, void *data)
@@ -341,6 +374,7 @@ abts_suite *testnames(abts_suite *suite)
     abts_run_test(suite, merge_dotdot_dotdot_dotdot, NULL);
 #if defined(WIN32)
     abts_run_test(suite, merge_lowercasedrive, NULL);
+    abts_run_test(suite, merge_shortname, NULL);
 #endif
 
     abts_run_test(suite, root_absolute, NULL);