This is an automated email from the ASF dual-hosted git repository. mxmanghi pushed a commit to branch 2.3 in repository https://gitbox.apache.org/repos/asf/tcl-rivet.git
The following commit(s) were added to refs/heads/2.3 by this push: new 60e4232 backporting fixes about ::rivet::var_qs and ::rivet::var_post, backporting also src/librivet/rivetPkgInit.c 60e4232 is described below commit 60e42322831260ae9dc03e6bd19907494b2887ff Author: Massimo Manghi <mxman...@apache.org> AuthorDate: Mon Nov 19 23:46:09 2018 +0100 backporting fixes about ::rivet::var_qs and ::rivet::var_post, backporting also src/librivet/rivetPkgInit.c --- .gitignore | 31 +++++++++++++++++++++++++++++++ ChangeLog | 9 +++++++++ Makefile.in | 17 ++++++++++------- VERSION | 2 +- configure.ac | 2 +- src/librivet/rivetPkgInit.c | 42 +++++++++++++++++------------------------- src/rivetcmds/rivetCore.c | 21 +++++++++++++++++++++ tests/fqrivet_var.tcl | 40 ++++++++++++++++++++++++++++++++++++++++ tests/post.test | 23 +++++++++++++++++++++++ 9 files changed, 153 insertions(+), 34 deletions(-) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..36d207d --- /dev/null +++ b/.gitignore @@ -0,0 +1,31 @@ +Makefile.in +doc/Makefile.in +src/Makefile.in +aclocal.m4 +autom4te.cache/ +configure +Makefile +_configs.sed +config.h +config.h.in +config.log +config.status +rivet_config.h +doc/Makefile +doc/convert_examples.tcl +doc/graphics +doc/html/ +libtool +src/Makefile +src/librivet/.deps/ +src/mod_rivet_ng/.deps/ +src/parser/.deps/ +src/request/.deps/ +stamp-h1 +*~ +*.libs/ +*.dirstamp +*.lo +*.la +*.swp +tags diff --git a/ChangeLog b/ChangeLog index 31f9945..c7e98d0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2018-11-19 Massimo Manghi <mxman...@apache.org> + * VERSION,configure.ac: bumping version to 2.3.7 + * src/rivetcmds/rivetCore.c: fix wrong discrimination between + ::rivet::var_qs,::rivet::var_post that lead to overlapping + functionalities + * src/librivet/rivetPkgInit.c: merging from 3.0 new namespace + determination that makes librivet independent from the module + globals + 2018-04-01 Massimo Manghi <mxman...@apache.org> * VERSION,configure.ac: bumping version to 2.3.6 diff --git a/Makefile.in b/Makefile.in index c92760a..e3d7a6d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2017 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -17,7 +17,7 @@ # # top-level Makefile.am for Apache Rivet: gets turned into a Makefile.in by automake # -# $Id: Makefile.am 1517859 2013-08-27 16:08:31Z mxmanghi $ +# $Id$ # # 2007/12/25: Added target uninistall-local that removes the tcl stuff (mxmanghi) # 2010/06/22: target instal-data-local searches for pkgIndex.tcl files and deletes them @@ -149,7 +149,7 @@ am__recursive_targets = \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - cscope distdir dist dist-all distcheck + cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, @@ -456,8 +456,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -601,7 +601,10 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ diff --git a/VERSION b/VERSION index e75da3e..00355e2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.3.6 +2.3.7 diff --git a/configure.ac b/configure.ac index 5cd2e34..85b1440 100644 --- a/configure.ac +++ b/configure.ac @@ -22,7 +22,7 @@ dnl # so you can encode the package version directly into the source files. #----------------------------------------------------------------------- -AC_INIT([Rivet],[2.3.6]) +AC_INIT([Rivet],[2.3.7]) TEA_INIT([3.9]) # we are storing here the configure command line, as recursive diff --git a/src/librivet/rivetPkgInit.c b/src/librivet/rivetPkgInit.c index d96cf48..17fd31e 100644 --- a/src/librivet/rivetPkgInit.c +++ b/src/librivet/rivetPkgInit.c @@ -23,8 +23,14 @@ #endif #include <tcl.h> +/* Function prototypes are defined with EXTERN. Since we are in the same DLL, + * no need to keep this extern... */ +#ifdef EXTERN +# undef EXTERN +# define EXTERN +#endif /* EXTERN */ #include "rivet.h" -#include "mod_rivet.h" +//#include "mod_rivet.h" /*----------------------------------------------------------------------------- * Rivet_GetNamespace -- @@ -49,25 +55,16 @@ #if RIVET_NAMESPACE_EXPORT == 1 -Tcl_Namespace* Rivet_GetNamespace( Tcl_Interp* interp) +Tcl_Namespace* +Rivet_GetNamespace( Tcl_Interp* interp) { - rivet_interp_globals *globals; Tcl_Namespace *rivet_ns; - globals = Tcl_GetAssocData(interp, "rivet", NULL); - if (globals != NULL) + rivet_ns = Tcl_FindNamespace(interp,RIVET_NS,NULL,TCL_GLOBAL_ONLY); + if (rivet_ns == NULL) { - rivet_ns = globals->rivet_ns; - } - else - { -// fprintf(stderr,"no Associated data found, running standalone\n"); - rivet_ns = Tcl_FindNamespace(interp, RIVET_NS, NULL, TCL_GLOBAL_ONLY); - if (rivet_ns == NULL) { - /* The namespace does not exist, create it */ - rivet_ns = Tcl_CreateNamespace (interp, RIVET_NS, NULL, - (Tcl_NamespaceDeleteProc *)NULL); - } + rivet_ns = Tcl_CreateNamespace (interp,RIVET_NS,NULL, + (Tcl_NamespaceDeleteProc *)NULL); } return rivet_ns; @@ -86,12 +83,9 @@ Tcl_Namespace* Rivet_GetNamespace( Tcl_Interp* interp) *----------------------------------------------------------------------------- */ -int +DLLEXPORT int Rivetlib_Init( Tcl_Interp *interp ) { -#if RIVET_NAMESPACE_EXPORT == 1 - //Tcl_Namespace *rivet_ns; -#endif #ifdef USE_TCL_STUBS if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) { @@ -104,16 +98,13 @@ Rivetlib_Init( Tcl_Interp *interp ) Rivet_InitList (interp); Rivet_InitCrypt(interp); Rivet_InitWWW (interp); -#if RIVET_NAMESPACE_EXPORT == 1 - //rivet_ns = Rivet_GetNamespace(interp); - //Tcl_Export(interp,rivet_ns,"*",0); -#endif return Tcl_PkgProvide( interp, RIVETLIB_TCL_PACKAGE, RIVET_VERSION ); } /*----------------------------------------------------------------------------- * Rivetlib_SafeInit -- + * * Install the commands provided by librivet that are believed to be * safe for use in safe interpreters, into a safe interpreter. * @@ -124,9 +115,10 @@ Rivetlib_Init( Tcl_Interp *interp ) *----------------------------------------------------------------------------- */ -int +DLLEXPORT int Rivetlib_SafeInit( Tcl_Interp *interp ) { + #ifdef USE_TCL_STUBS if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) { #else diff --git a/src/rivetcmds/rivetCore.c b/src/rivetcmds/rivetCore.c index 2e2dd29..2d31dc3 100644 --- a/src/rivetcmds/rivetCore.c +++ b/src/rivetcmds/rivetCore.c @@ -560,6 +560,7 @@ TCL_CMD_HEADER ( Rivet_LoadHeaders ) TCL_CMD_HEADER ( Rivet_Var ) { char *cmd; + char *p; char *command; Tcl_Obj *result = NULL; int source; @@ -578,6 +579,26 @@ TCL_CMD_HEADER ( Rivet_Var ) result = Tcl_NewObj(); /* determine if var_qs, var_post or var was called */ + + /* first of all we have to skip the namespace string at the beginning of the command: + * + * This fragment of code is taken from tcl 8.6.6 (tclNamesp.c) and it's part of the + * function implementing Tcl "namespace tail", as such it should be authoritative + * regarding the determination of the namespace stripped command name + */ + + for (p = cmd; *p != '\0'; p++) { + /* empty body */ + } + + while (--p > cmd) { + if ((*p == ':') && (*(p-1) == ':')) { + p++; /* Just after the last "::" */ + break; + } + } + cmd = p; + if (!strcmp(cmd, "var_qs")) source = VAR_SRC_QUERYSTRING; else if (!strcmp(cmd, "var_post")) source = VAR_SRC_POST; else source = VAR_SRC_ALL; diff --git a/tests/fqrivet_var.tcl b/tests/fqrivet_var.tcl new file mode 100644 index 0000000..8a5eedf --- /dev/null +++ b/tests/fqrivet_var.tcl @@ -0,0 +1,40 @@ +switch [::rivet::var_qs get t1] { + + 1 { + set qsvariables [dict create {*}[::rivet::var_qs all]] + set postvariables [dict create {*}[::rivet::var_post all]] + + set qsvar {qsarg1 qsarg2} + set postvar {postarg1 postarg2} + + set qs "" + set post "" + foreach v $qsvar {lappend qs $v [dict get $qsvariables $v]} + foreach v $postvar {lappend post $v [dict get $postvariables $v]} + puts -nonewline "var_qs = $qs\nvar_post = $post" + } + 2 { + #::rivet::parray server + # GET request: no var_post variables are supposed to be returned + + set qsvariables [dict create {*}[::rivet::var_qs all]] + set postvariables [dict create {*}[::rivet::var_post all]] + + if {[dict exists $postvariables qsarg1] || [dict exists $postvariables qsarg2]} { + puts "KO: [::rivet::var_post all]" + } else { + puts -nonewline "OK" + } + + } + 3 { + set qsvariables [dict create {*}[::rivet::var_qs all]] + set postvariables [dict create {*}[::rivet::var_post all]] + + if {[dict exists $qsvariables postarg1] || [dict exists $qsvariables postarg2]} { + puts "KO: $qsvariables" + } else { + puts -nonewline "OK" + } + } +} diff --git a/tests/post.test b/tests/post.test index 77e9bf8..8fed8dc 100644 --- a/tests/post.test +++ b/tests/post.test @@ -37,3 +37,26 @@ set testfilename1 post.rvt regexp -line {^\[::rivet::var_post get foobar\] = goober$} [ ::http::data $page ] match set match } {[::rivet::var_post get foobar] = goober} + +set rivetscript "${urlbase}fqrivet_var.tcl" + +::tcltest::test postvariables-5.1 {::rivet::var_qs and ::rivet::var_post} { + set page [::http::geturl "${rivetscript}?qsarg1=val1&qsarg2=val2&t1=1" \ + -query [::http::formatQuery postarg1 val1 postarg2 val2]] + set match [::http::data $page] + set match +} {var_qs = qsarg1 val1 qsarg2 val2 +var_post = postarg1 val1 postarg2 val2} + +::tcltest::test postvariables-5.2 {::rivet::var_post and ::rivet::var_qs crosstalk 1} { + set page [::http::geturl "${rivetscript}?qsarg1=val1&qsarg2=val2&t1=2"] + set match [::http::data $page] + set match +} {OK} + +::tcltest::test postvariables-5.3 {::rivet::var_post and ::rivet::var_qs crosstalk 2} { + set page [::http::geturl "${rivetscript}?t1=3" \ + -query [::http::formatQuery postarg1 val1 postarg2 val2]] + set match [::http::data $page] + set match +} {OK} --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@tcl.apache.org For additional commands, e-mail: commits-h...@tcl.apache.org