]> granicus.if.org Git - icu/commitdiff
Change public method to use StringPiece
authorShane F. Carr <shane@unicode.org>
Fri, 17 Jan 2020 16:13:16 +0000 (17:13 +0100)
committerShane F. Carr <shane@unicode.org>
Fri, 17 Jan 2020 16:14:19 +0000 (17:14 +0100)
icu4c/source/i18n/measunit_extra.cpp
icu4c/source/i18n/unicode/measunit.h
icu4c/source/test/intltest/measfmttest.cpp

index 0329c68f13cfc311f663e4c7aa888e71bb3119ba..a7f24f1e348729c5291617d5a811df7a6429be9d 100644 (file)
@@ -731,7 +731,7 @@ private:
 } // namespace
 
 
-MeasureUnit MeasureUnit::forIdentifier(const char* identifier, UErrorCode& status) {
+MeasureUnit MeasureUnit::forIdentifier(StringPiece identifier, UErrorCode& status) {
     return Parser::from(identifier, status).getOnlySequenceUnit(status).build(status);
 }
 
index cdf760fdbdb58ae5bf4cb27ad380c80410434b0a..4ec0f62684f21b665510f94d3d78acdaba59524d 100644 (file)
@@ -265,7 +265,7 @@ class U_I18N_API MeasureUnit: public UObject {
      * @param status Set if the identifier is invalid.
      * @draft ICU 67
      */
-    static MeasureUnit forIdentifier(const char* identifier, UErrorCode& status);
+    static MeasureUnit forIdentifier(StringPiece identifier, UErrorCode& status);
 
     /**
      * Copy assignment operator.
index 06d65c1adf48e0e147b06333b2aba2767f7092c5..4f65bc619fd13055ce9874f2e30f6a849a31767b 100644 (file)
@@ -3355,6 +3355,11 @@ void MeasureFormatTest::TestCompoundUnitOperations() {
     meterSecond.withSIPrefix(UMEASURE_SI_PREFIX_CENTI, status);
     status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
 
+    // Test that StringPiece does not overflow
+    MeasureUnit kiloSquareSecond2 = MeasureUnit::forIdentifier({secondCentimeter.getIdentifier(), 17}, status);
+    verifySingleUnit(kiloSquareSecond2, UMEASURE_SI_PREFIX_KILO, 2, "square-kilosecond");
+    assertTrue("string piece equality", kiloSquareSecond == kiloSquareSecond2);
+
     MeasureUnit footInch = MeasureUnit::forIdentifier("foot+inch", status);
     MeasureUnit inchFoot = MeasureUnit::forIdentifier("inch+foot", status);