[PATCH] THRIFT-5270: Fix wrong int to string conversions
authorYuxuan 'fishy' Wang <yuxuan.wang@reddit.com>
Sat, 29 Aug 2020 00:20:31 +0000 (17:20 -0700)
committerPeter Michael Green <plugwash@raspbian.org>
Sun, 22 Nov 2020 14:00:47 +0000 (14:00 +0000)
Client: go

Starting from go 1.15, go test starts to complain about wrongly used int
to string conversions:

    ./field.go:58:83: conversion from int to string yields a string of one rune, not a string of digits (did you mean fmt.Sprint(x)?)
    ./numeric.go:72:12: conversion from int64 to string yields a string of one rune, not a string of digits (did you mean fmt.Sprint(x)?)
    ./json_protocol_test.go:612:92: conversion from int to string yields a string of one rune, not a string of digits (did you mean fmt.Sprint(x)?)
    ./simple_json_protocol_test.go:685:96: conversion from int to string yields a string of one rune, not a string of digits (did you mean fmt.Sprint(x)?)

json_protocol_test and simple_json_protocol_test usages are actually
already in format arg so just remove the conversion is good enough.
field is no longer used anywhere so just removed it (there's one line of
commented out code in compact_protocol so remove that line as well). The
one in numeric.go is actually a bug. We didn't set sValue correctly in
NewNumericFromI64 and NewNumericFromI32 functions.

Gbp-Pq: Name Fix_wrong_int_to_string_conversions.patch

lib/go/thrift/compact_protocol.go
lib/go/thrift/field.go [deleted file]
lib/go/thrift/json_protocol_test.go
lib/go/thrift/numeric.go
lib/go/thrift/simple_json_protocol_test.go

index 1900d50c3b169c77a618ac8d9c560b1825e7aa6c..c5b6f4b19ddd916a261b094fd2c0d4b6cf279b7b 100644 (file)
@@ -209,7 +209,6 @@ func (p *TCompactProtocol) writeFieldBeginInternal(name string, typeId TType, id
        }
 
        p.lastFieldId = fieldId
-       // p.lastField.Push(field.id);
        return written, nil
 }
 
diff --git a/lib/go/thrift/field.go b/lib/go/thrift/field.go
deleted file mode 100644 (file)
index 9d66525..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package thrift
-
-// Helper class that encapsulates field metadata.
-type field struct {
-       name   string
-       typeId TType
-       id     int
-}
-
-func newField(n string, t TType, i int) *field {
-       return &field{name: n, typeId: t, id: i}
-}
-
-func (p *field) Name() string {
-       if p == nil {
-               return ""
-       }
-       return p.name
-}
-
-func (p *field) TypeId() TType {
-       if p == nil {
-               return TType(VOID)
-       }
-       return p.typeId
-}
-
-func (p *field) Id() int {
-       if p == nil {
-               return -1
-       }
-       return p.id
-}
-
-func (p *field) String() string {
-       if p == nil {
-               return "<nil>"
-       }
-       return "<TField name:'" + p.name + "' type:" + string(p.typeId) + " field-id:" + string(p.id) + ">"
-}
-
-var ANONYMOUS_FIELD *field
-
-type fieldSlice []field
-
-func (p fieldSlice) Len() int {
-       return len(p)
-}
-
-func (p fieldSlice) Less(i, j int) bool {
-       return p[i].Id() < p[j].Id()
-}
-
-func (p fieldSlice) Swap(i, j int) {
-       p[i], p[j] = p[j], p[i]
-}
-
-func init() {
-       ANONYMOUS_FIELD = newField("", STOP, 0)
-}
index 59c4d64a26070939c6b1782826451f9fdcbbfca9..b5647878467b3d06a8c1ad8377953af44461eecd 100644 (file)
@@ -609,7 +609,7 @@ func TestWriteJSONProtocolMap(t *testing.T) {
        for k, value := range DOUBLE_VALUES {
                ik, err := p.ReadI32()
                if err != nil {
-                       t.Fatalf("Bad key for %s index %v, wrote: %v, expected: %v, error: %s", thetype, k, ik, string(k), err.Error())
+                       t.Fatalf("Bad key for %s index %v, wrote: %v, expected: %v, error: %s", thetype, k, ik, k, err.Error())
                }
                if int(ik) != k {
                        t.Fatalf("Bad key for %s index %v, wrote: %v, expected: %v", thetype, k, ik, k)
index aa8daa9b54f9263497cf70145dfbdc46a3dd2e60..e4512d204c0d2199dede8cf5db2f8855bd6f9946 100644 (file)
@@ -69,14 +69,14 @@ func NewNumericFromDouble(dValue float64) Numeric {
 
 func NewNumericFromI64(iValue int64) Numeric {
        dValue := float64(iValue)
-       sValue := string(iValue)
+       sValue := strconv.FormatInt(iValue, 10)
        isNil := false
        return &numeric{iValue: iValue, dValue: dValue, sValue: sValue, isNil: isNil}
 }
 
 func NewNumericFromI32(iValue int32) Numeric {
        dValue := float64(iValue)
-       sValue := string(iValue)
+       sValue := strconv.FormatInt(int64(iValue), 10)
        isNil := false
        return &numeric{iValue: int64(iValue), dValue: dValue, sValue: sValue, isNil: isNil}
 }
index 0126da0a8e402dcafa70b6473847177fe4552a8a..4446d4df196a9808e6dd152bdbb8f5cc44a35a4e 100644 (file)
@@ -682,7 +682,7 @@ func TestWriteSimpleJSONProtocolMap(t *testing.T) {
                strv := l[k*2+4]
                ik, err := strconv.Atoi(strk)
                if err != nil {
-                       t.Fatalf("Bad value for %s index %v, wrote: %v, expected: %v, error: %s", thetype, k, strk, string(k), err.Error())
+                       t.Fatalf("Bad value for %s index %v, wrote: %v, expected: %v, error: %s", thetype, k, strk, k, err.Error())
                }
                if ik != k {
                        t.Fatalf("Bad value for %s index %v, wrote: %v, expected: %v", thetype, k, strk, k)