]> git.vpit.fr Git - perl/modules/re-engine-Hooks.git/blobdiff - t/re-engine-Hooks-TestDist/TestDist.xs
Make sure the perl callback sample does not clobber PL_reg_state
[perl/modules/re-engine-Hooks.git] / t / re-engine-Hooks-TestDist / TestDist.xs
index 0005b019b09b36074583c0b279d01a8f74934ffc..ef36ccb9303975b003576a92c5964f863c00212a 100644 (file)
@@ -48,6 +48,8 @@ STATIC void reht_custom_comp_node(pTHX_ regexp *rx, regnode *node) {
  node_name = PL_reg_name[OP(node)];
 }
 
+STATIC struct re_save_state reht_state_bak;
+
 STATIC void reht_custom_exec_node(pTHX_ regexp *rx, regnode *node, regmatch_info *reginfo, regmatch_state *st) {
  STRLEN      node_namelen;
  const char *node_name;
@@ -55,6 +57,10 @@ STATIC void reht_custom_exec_node(pTHX_ regexp *rx, regnode *node, regmatch_info
  node_name    = PL_reg_name[OP(node)];
  node_namelen = strlen(node_name);
 
+ /* The global regexp state may be overwritten if the Perl callback does a
+  * regexp match. */
+ reht_state_bak = PL_reg_state;
+
  dSP;
 
  ENTER;
@@ -69,6 +75,8 @@ STATIC void reht_custom_exec_node(pTHX_ regexp *rx, regnode *node, regmatch_info
 
  FREETMPS;
  LEAVE;
+
+ PL_reg_state = reht_state_bak;
 }
 
 /* --- XS ------------------------------------------------------------------ */