durable_rules 2.0.22 → 2.0.23
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/librb/durable.rb +6 -3
- data/src/rules/events.c +56 -2
- data/src/rules/regex.c +18 -7
- data/src/rules/rete.h +1 -1
- data/src/rules/rules.h +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5220161e2cc19405339ce104109a5ab075b092d5
|
4
|
+
data.tar.gz: 5e377d29c7c5d3985ddd8649b5abbf264f7d6612
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f86aca1a3edb8a690940bbbccd9802399174bc23c15bae438b95bde71bb9322374ee58caca508f1dc47dbfc25d5ea128d4479541b34645d16c4b20d577f9119
|
7
|
+
data.tar.gz: 9304dd821caa413367edffa5e410bbf19f7a504ab06182796d7cdd2d8e1ad27454382968b64483a32757e968b50f20dbd616dd5028a6e7b4c2cd54f6e3f5d13c
|
data/librb/durable.rb
CHANGED
data/src/rules/events.c
CHANGED
@@ -486,13 +486,67 @@ static unsigned int reduceExpression(ruleset *tree,
|
|
486
486
|
|
487
487
|
if (currentExpression->right.type == JSON_REGEX || currentExpression->right.type == JSON_IREGEX) {
|
488
488
|
targetProperty->type = JSON_BOOL;
|
489
|
+
targetProperty->value.b = 0;
|
490
|
+
|
491
|
+
char *leftString = "";
|
492
|
+
unsigned short leftLength = 0;
|
493
|
+
switch(leftProperty->type) {
|
494
|
+
case JSON_INT:
|
495
|
+
{
|
496
|
+
#ifdef _WIN32
|
497
|
+
leftString = (char *)_alloca(sizeof(char)*(MAX_INT_LENGTH + 1));
|
498
|
+
sprintf_s(leftString, sizeof(char)*(MAX_INT_LENGTH + 1), "%lld", leftProperty->value.i);
|
499
|
+
#else
|
500
|
+
char newString[MAX_INT_LENGTH + 1];
|
501
|
+
leftString = newString;
|
502
|
+
snprintf(leftString, sizeof(char)*(MAX_INT_LENGTH + 1), "%lld", leftProperty->value.i);
|
503
|
+
#endif
|
504
|
+
leftLength = strlen(leftString);
|
505
|
+
break;
|
506
|
+
}
|
507
|
+
case JSON_DOUBLE:
|
508
|
+
{
|
509
|
+
#ifdef _WIN32
|
510
|
+
leftString = (char *)_alloca(sizeof(char)*(MAX_DOUBLE_LENGTH + 1));
|
511
|
+
sprintf_s(leftString, sizeof(char)*(MAX_DOUBLE_LENGTH + 1), "%f", leftProperty->value.d);
|
512
|
+
#else
|
513
|
+
char newString[MAX_DOUBLE_LENGTH + 1];
|
514
|
+
leftString = newString;
|
515
|
+
snprintf(leftString, sizeof(char)*(MAX_DOUBLE_LENGTH + 1), "%f", leftProperty->value.d);
|
516
|
+
#endif
|
517
|
+
leftLength = strlen(leftString);
|
518
|
+
break;
|
519
|
+
}
|
520
|
+
case JSON_BOOL:
|
521
|
+
if (leftProperty->value.b) {
|
522
|
+
leftString = "true";
|
523
|
+
leftLength = 4;
|
524
|
+
}
|
525
|
+
else {
|
526
|
+
leftString = "false";
|
527
|
+
leftLength = 5;
|
528
|
+
}
|
529
|
+
|
530
|
+
break;
|
531
|
+
case JSON_NIL:
|
532
|
+
leftString = "nil";
|
533
|
+
leftLength = 3;
|
534
|
+
break;
|
535
|
+
case JSON_STRING:
|
536
|
+
leftString = leftProperty->value.s;
|
537
|
+
leftLength = leftProperty->valueLength;
|
538
|
+
break;
|
539
|
+
}
|
540
|
+
|
489
541
|
targetProperty->value.b = evaluateRegex(tree,
|
490
|
-
|
491
|
-
|
542
|
+
leftString,
|
543
|
+
leftLength,
|
492
544
|
(currentExpression->right.type == JSON_REGEX) ? 0 : 1,
|
493
545
|
currentExpression->right.value.regex.vocabularyLength,
|
494
546
|
currentExpression->right.value.regex.statesLength,
|
495
547
|
currentExpression->right.value.regex.stateMachineOffset);
|
548
|
+
|
549
|
+
|
496
550
|
return RULES_OK;
|
497
551
|
}
|
498
552
|
|
data/src/rules/regex.c
CHANGED
@@ -23,6 +23,7 @@
|
|
23
23
|
#define MAX_SET 8192
|
24
24
|
#define MAX_LIST 1024
|
25
25
|
#define MAX_INTERVAL 100
|
26
|
+
#define MAX_REFCOUNT 1000
|
26
27
|
|
27
28
|
|
28
29
|
#define CREATE_QUEUE(type) \
|
@@ -597,10 +598,6 @@ static unsigned int linkStates(state *previousState,
|
|
597
598
|
previousState->transitions[previousState->transitionsLength].next = nextState;
|
598
599
|
++previousState->transitionsLength;
|
599
600
|
++nextState->refCount;
|
600
|
-
if (previousState->transitionsLength == MAX_TRANSITIONS) {
|
601
|
-
return ERR_REGEX_MAX_TRANSITIONS;
|
602
|
-
}
|
603
|
-
|
604
601
|
return RULES_OK;
|
605
602
|
}
|
606
603
|
|
@@ -852,10 +849,18 @@ static unsigned int validateGraph(char **first, char *last) {
|
|
852
849
|
switch (currentToken.type) {
|
853
850
|
case REGEX_SYMBOL:
|
854
851
|
case REGEX_UNION:
|
855
|
-
case REGEX_STAR:
|
856
852
|
case REGEX_PLUS:
|
857
|
-
case REGEX_QUESTION:
|
858
853
|
break;
|
854
|
+
case REGEX_STAR:
|
855
|
+
case REGEX_QUESTION:
|
856
|
+
{
|
857
|
+
char *nextFirst = *first;
|
858
|
+
token nextToken;
|
859
|
+
unsigned int nextResult = readNextToken(&nextFirst, last, &nextToken);
|
860
|
+
if (nextResult == REGEX_PARSE_OK && nextToken.type == REGEX_STAR) {
|
861
|
+
return ERR_REGEX_INVALID;
|
862
|
+
}
|
863
|
+
}
|
859
864
|
case REGEX_REGEX:
|
860
865
|
result = validateGraph(first, last);
|
861
866
|
if (result != REGEX_PARSE_OK) {
|
@@ -1141,7 +1146,7 @@ static unsigned int transformToDFA(state *nfa,
|
|
1141
1146
|
}
|
1142
1147
|
}
|
1143
1148
|
|
1144
|
-
DEQUEUE(¤tState);
|
1149
|
+
DEQUEUE(¤tState);
|
1145
1150
|
}
|
1146
1151
|
|
1147
1152
|
return RULES_OK;
|
@@ -1343,6 +1348,12 @@ unsigned int compileRegex(void *tree,
|
|
1343
1348
|
if (result != RULES_OK) {
|
1344
1349
|
return result;
|
1345
1350
|
}
|
1351
|
+
|
1352
|
+
if (!*vocabularyLength || !*statesLength) {
|
1353
|
+
return ERR_REGEX_INVALID;
|
1354
|
+
}
|
1355
|
+
|
1356
|
+
|
1346
1357
|
void *newStateMachine;
|
1347
1358
|
result = storeRegexStateMachine((ruleset *)tree,
|
1348
1359
|
*vocabularyLength,
|
data/src/rules/rete.h
CHANGED
data/src/rules/rules.h
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: durable_rules
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.23
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jesus Ruiz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|