Skip to content

Commit df7b3cc

Browse files
authored
Fix a bug where a publicId which contains 'v[num]' is considered to contain a version, therefore the version is skipped. (#242)
1 parent 4fffc8b commit df7b3cc

File tree

5 files changed

+39
-33
lines changed

5 files changed

+39
-33
lines changed

cloudinary-core/src/main/java/com/cloudinary/Url.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ public String generate(String source) {
377377
source = finalizedSource[0];
378378
String sourceToSign = finalizedSource[1];
379379

380-
if (this.config.forceVersion && sourceToSign.contains("/") && !StringUtils.hasVersionString(sourceToSign) &&
380+
if (this.config.forceVersion && sourceToSign.contains("/") && !StringUtils.startWithVersionString(sourceToSign) &&
381381
!httpSource && StringUtils.isEmpty(version)) {
382382
version = "1";
383383
}

cloudinary-core/src/main/java/com/cloudinary/utils/StringUtils.java

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -340,26 +340,15 @@ public static String removeStartingChars(String s, char c) {
340340
}
341341

342342
/**
343-
* Checks whether the url contains a versioning string (v + number, e.g. v12345)
344-
* @param url The url to check
345-
* @return Whether a version string is contained within the url
343+
* Checks whether a publicId starts a versioning string (v + number, e.g. v12345)
344+
* @param publicId The url to check
345+
* @return Whether a version string is contained within the publicId
346346
*/
347-
public static boolean hasVersionString(String url) {
348-
boolean inVersion = false;
349-
for (int i = 0; i < url.length(); i++) {
350-
char c = url.charAt(i);
351-
if (c == 'v') {
352-
inVersion = true;
353-
} else if (Character.isDigit(c) && inVersion) {
354-
return true;
355-
} else {
356-
inVersion = false;
357-
}
358-
359-
347+
public static boolean startWithVersionString(String publicId){
348+
if (publicId.startsWith("/")){
349+
publicId = publicId.substring(1);
360350
}
361-
362-
return false;
351+
return publicId.length()>1 && publicId.startsWith("v") && Character.isDigit(publicId.charAt(1));
363352
}
364353

365354
/**

cloudinary-core/src/test/java/com/cloudinary/UtilTest.java

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -129,18 +129,27 @@ public void testMergeSlashes(){
129129
}
130130

131131
@Test
132-
public void testHasVersionString(){
133-
assertTrue(StringUtils.hasVersionString("wqeasdlv31423423"));
134-
assertTrue(StringUtils.hasVersionString("v1"));
135-
assertTrue(StringUtils.hasVersionString("v1fdasfasd"));
136-
assertTrue(StringUtils.hasVersionString("asdasv1fdasfasd"));
137-
assertTrue(StringUtils.hasVersionString("12v1fdasfasd"));
138-
139-
assertFalse(StringUtils.hasVersionString("121fdasfasd"));
140-
assertFalse(StringUtils.hasVersionString(""));
141-
assertFalse(StringUtils.hasVersionString("vvv"));
142-
assertFalse(StringUtils.hasVersionString("v"));
143-
assertFalse(StringUtils.hasVersionString("asdvvv"));
132+
public void testStartWithVersionString(){
133+
assertTrue(StringUtils.startWithVersionString("v1"));
134+
assertTrue(StringUtils.startWithVersionString("v1fdasfasd"));
135+
assertTrue(StringUtils.startWithVersionString("v112fdasfasd"));
136+
assertTrue(StringUtils.startWithVersionString("v112/fda/sfasd"));
137+
assertTrue(StringUtils.startWithVersionString("v112/fda/v1sfasd"));
138+
assertTrue(StringUtils.startWithVersionString("/v112/fda/v1sfasd"));
139+
140+
assertFalse(StringUtils.startWithVersionString("asdasv1fdasfasd"));
141+
assertFalse(StringUtils.startWithVersionString("12v1fdasfasd"));
142+
assertFalse(StringUtils.startWithVersionString("asdasv1fdasfasd"));
143+
assertFalse(StringUtils.startWithVersionString("wqeasdlv31423423"));
144+
assertFalse(StringUtils.startWithVersionString("wqeasdl/v31423423"));
145+
assertFalse(StringUtils.startWithVersionString("121fdasfasd"));
146+
assertFalse(StringUtils.startWithVersionString("/121fdasfasd"));
147+
assertFalse(StringUtils.startWithVersionString("/"));
148+
assertFalse(StringUtils.startWithVersionString("/v"));
149+
assertFalse(StringUtils.startWithVersionString(""));
150+
assertFalse(StringUtils.startWithVersionString("vvv"));
151+
assertFalse(StringUtils.startWithVersionString("v"));
152+
assertFalse(StringUtils.startWithVersionString("asdvvv"));
144153
}
145154

146155
@Test

cloudinary-core/src/test/java/com/cloudinary/test/CloudinaryTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,14 @@ public void testFoldersWithExcludeVersion() {
636636
result = cloudinary.url().generate("folder/test");
637637
assertEquals(DEFAULT_UPLOAD_PATH + "v1/folder/test", result);
638638

639+
// should not add version if the path STARTS with 'v[num]'
640+
result = cloudinary.url().generate("v1234/folder/test");
641+
assertEquals(DEFAULT_UPLOAD_PATH + "v1234/folder/test", result);
642+
643+
// should add version if the path CONTAINS 'v[num]'
644+
result = cloudinary.url().generate("folder/v123test");
645+
assertEquals(DEFAULT_UPLOAD_PATH + "v1/folder/v123test", result);
646+
639647
// should add version if forceVersion is true
640648
result = cloudinary.url().forceVersion(true).generate("folder/test");
641649
assertEquals(DEFAULT_UPLOAD_PATH + "v1/folder/test", result);

java_shared.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
sourceCompatibility = 1.6
2-
targetCompatibility = 1.6
1+
sourceCompatibility = 1.7
2+
targetCompatibility = 1.7
33

44
javadoc {
55
options.encoding = 'UTF-8'

0 commit comments

Comments
 (0)