hash(OnigCodePoint codes[])
{
  static const unsigned short asso_values[] =
    {
         8,    6,    2,  124,    5,    1,   36, 1545, 1545, 1545,
      1545, 1545, 1545,   11, 1545, 1545, 1545,   16, 1545, 1545,
       562, 1545, 1545, 1545, 1545,   77, 1545, 1545, 1545, 1545,
      1545,    0,    3, 1545,   61,  628, 1379,  206, 1378,  607,
      1372,  597, 1399,  569, 1371,    4, 1365,  559, 1359,  548,
      1353,  836, 1393,  830, 1345,  587, 1344,  581, 1336,  539,
      1335,  530,  982,  521,  970,  818, 1389,  723, 1329,  351,
      1320,  333, 1312,  293, 1311,  320, 1304,  176,  589,  311,
      1165,  302, 1384, 1243,  579,  780,  173, 1230,  147, 1213,
        75, 1219, 1296, 1009, 1293, 1282, 1267, 1217, 1030,  331,
      1291, 1210, 1286,  998,  500,  993, 1359,  806, 1281,  510,
      1048,  501,  662,  797,  754,  792,  372,  775,  290,  768,
       228,  755,  292, 1159,  489, 1135,  267, 1229,  233, 1053,
       222,  728,  159,  708,  484,  695,  155,  995,  247,  686,
       859,  674,  747,  618,  561,  381,  313,  987,  167,  975,
       165, 1279,  388, 1207,  157,  765,  900, 1007,  794,  476,
        21, 1198, 1271,  490, 1265,  478, 1245,   18,    8,  253,
      1188,  652,    7,  245, 1185,  415, 1256,  226, 1177,   54,
      1169,  214, 1155,  195,  607,   42,  963,   30, 1147,  185,
      1139,  465, 1129,  451, 1121,   86,  948,  136,  940,   76,
       909,   66,  664,  126,  644,  116,  632,  106,  930,  166,
       925,  149,  915,   96,  903,  390,  364,  283,  746,  273,
      1098,  372, 1095,  265,  528,  361,  311,  897, 1195,  396,
      1103,  425, 1094, 1088,  893,  887,  573,  407,  237, 1083,
       934, 1145,  432, 1076,  679,  714,  956, 1112,  509,  880,
        62,  873,  157,  864,  276, 1069,  112,  855,  156, 1063,
      1545,  848,  152, 1057, 1545, 1047,  145, 1041,  144, 1035,
        49, 1025,  142, 1256, 1545, 1239,  355,  342,   21, 1019,
        14, 1233,  459,  843,  822,  740,   38,  553,   96,  448,
         8
    };
  return asso_values[(unsigned char)onig_codes_byte_at(codes, 2)+35] + asso_values[(unsigned char)onig_codes_byte_at(codes, 1)+1] + asso_values[(unsigned char)onig_codes_byte_at(codes, 0)];
}

The product writes data past the end, or before the beginning, of the intended buffer.