]> source.dussan.org Git - iciql.git/commitdiff
Be more careful with primitive type rollover in alias instantiation
authorJames Moger <james.moger@gitblit.com>
Mon, 6 Oct 2014 14:33:56 +0000 (10:33 -0400)
committerJames Moger <james.moger@gitblit.com>
Mon, 6 Oct 2014 14:33:56 +0000 (10:33 -0400)
releases.moxie
src/main/java/com/iciql/util/Utils.java

index 31b1b86e3c38b32d7200a73a8f0d97b2d341dda2..53a19a015772a10f8caca183819cf881c82112cc 100644 (file)
@@ -12,12 +12,14 @@ r21: {
     fixes:
     - Return null NPE in selectFirst() if list is empty (pr-5)
     - Fix Moxie toolkit download URL (pr-6)
+    - Be more careful with primitive numeric type rollovers
     changes: ~
     additions:
     - Add syntax for IN and NOT IN (pr-7)
     - Add support for nested AND/OR conditions (pr-8)
     dependencyChanges: ~
     contributors:
+    - James Moger
     - Kazunobu Raita
     - Sotaro Suzuki
 }
index bc636d1122bddcf9632a780162d9a8c8960730d7..92ca8252fa12488432863193579cd2eb76724b4d 100644 (file)
@@ -49,19 +49,19 @@ import com.iciql.IciqlException;
 public class Utils {\r
 \r
        public static final AtomicLong COUNTER = new AtomicLong(0);\r
-       \r
+\r
        public static final AtomicInteger AS_COUNTER = new AtomicInteger(0);\r
 \r
        private static final boolean MAKE_ACCESSIBLE = true;\r
 \r
        private static final int BUFFER_BLOCK_SIZE = 4 * 1024;\r
-       \r
+\r
        public static synchronized int nextAsCount() {\r
                // prevent negative values and use a threadsafe counter\r
                int count = AS_COUNTER.incrementAndGet();\r
                if (count == Integer.MAX_VALUE) {\r
                        count = 0;\r
-                       AS_COUNTER.set(count);                  \r
+                       AS_COUNTER.set(count);\r
                }\r
                return count;\r
        }\r
@@ -146,15 +146,15 @@ public class Utils {
        public static <T> T newObject(Class<T> clazz) {\r
                // must create new instances\r
                if (clazz == int.class || clazz == Integer.class) {\r
-                       return (T) new Integer((int) COUNTER.getAndIncrement());\r
+                       return (T) new Integer((int) (COUNTER.getAndIncrement() % Integer.MAX_VALUE));\r
                } else if (clazz == String.class) {\r
                        return (T) ("" + COUNTER.getAndIncrement());\r
                } else if (clazz == long.class || clazz == Long.class) {\r
                        return (T) new Long(COUNTER.getAndIncrement());\r
                } else if (clazz == short.class || clazz == Short.class) {\r
-                       return (T) new Short((short) COUNTER.getAndIncrement());\r
+                       return (T) new Short((short) (COUNTER.getAndIncrement() % Short.MAX_VALUE));\r
                } else if (clazz == byte.class || clazz == Byte.class) {\r
-                       return (T) new Byte((byte) COUNTER.getAndIncrement());\r
+                       return (T) new Byte((byte) (COUNTER.getAndIncrement() % Byte.MAX_VALUE));\r
                } else if (clazz == float.class || clazz == Float.class) {\r
                        return (T) new Float(COUNTER.getAndIncrement());\r
                } else if (clazz == double.class || clazz == Double.class) {\r
@@ -397,7 +397,7 @@ public class Utils {
 \r
        /**\r
         * Read a number of characters from a reader and close it.\r
-        * \r
+        *\r
         * @param in\r
         *            the reader\r
         * @param length\r
@@ -430,7 +430,7 @@ public class Utils {
 \r
        /**\r
         * Read a number of bytes from a stream and close it.\r
-        * \r
+        *\r
         * @param in\r
         *            the stream\r
         * @param length\r