You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by ju...@apache.org on 2022/02/20 21:25:19 UTC

[jspwiki] branch master updated (deb5417 -> a09f19e)

This is an automated email from the ASF dual-hosted git repository.

juanpablo pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git.


    from deb5417  2.11.2-git-03
     new 63c82a0  Refactored the org.apache.wiki.htmltowiki package,
     new a91f9cd  javadoc fixes
     new 6513f07  code format
     new 92ccfaa  Dependency updates
     new 07e1f82  JSPWIKI-79 - Ounce Labs Security Finding: Authentication - Change Password
     new a09f19e  2.11.2-git-04

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 ChangeLog.md                                       |  17 ++++++++
 .../src/main/java/org/apache/wiki/api/Release.java |   2 +-
 .../java/org/apache/wiki/api/core/Command.java     |   8 ++--
 .../java/org/apache/wiki/api/core/Context.java     |  26 ++++++-------
 .../org/apache/wiki/auth/DefaultUserManager.java   |   9 +++--
 .../wiki/auth/user/AbstractUserDatabase.java       |   7 ++--
 .../apache/wiki/htmltowiki/SyntaxDecorator.java    |   4 +-
 .../htmltowiki/XHtmlElementToWikiTranslator.java   |  18 ++++-----
 .../apache/wiki/htmltowiki/syntax/BrDecorator.java |   6 +--
 .../wiki/htmltowiki/syntax/CodeDecorator.java      |  10 ++---
 .../apache/wiki/htmltowiki/syntax/LiDecorator.java |   8 ++--
 .../apache/wiki/htmltowiki/syntax/OlDecorator.java |  10 ++---
 .../htmltowiki/syntax/PlainTextBoldDecorator.java  |   5 +--
 .../htmltowiki/syntax/PlainTextCssDecorator.java   |   5 +--
 .../syntax/PlainTextCssSpecialDecorator.java       |   5 +--
 .../wiki/htmltowiki/syntax/PlainTextDecorator.java |   5 +--
 .../syntax/PlainTextItalicDecorator.java           |   5 +--
 .../syntax/PlainTextMonospaceDecorator.java        |  10 ++---
 .../apache/wiki/htmltowiki/syntax/TdDecorator.java |   6 +--
 .../htmltowiki/syntax/TextElementDecorator.java    |   6 +--
 .../apache/wiki/htmltowiki/syntax/ThDecorator.java |   6 +--
 .../apache/wiki/htmltowiki/syntax/UlDecorator.java |  10 ++---
 .../htmltowiki/syntax/WikiSyntaxDecorator.java     |   4 +-
 .../syntax/jspwiki/JSPWikiBrDecorator.java         |   4 +-
 .../syntax/jspwiki/JSPWikiCodeDecorator.java       |   4 +-
 .../syntax/jspwiki/JSPWikiLiDecorator.java         |  14 +++++--
 .../syntax/jspwiki/JSPWikiOlDecorator.java         |   4 +-
 .../jspwiki/JSPWikiPlainTextBoldDecorator.java     |   5 +--
 .../jspwiki/JSPWikiPlainTextCssDecorator.java      |   5 +--
 .../JSPWikiPlainTextCssSpecialDecorator.java       |   5 +--
 .../jspwiki/JSPWikiPlainTextItalicDecorator.java   |   5 +--
 .../JSPWikiPlainTextMonospaceDecorator.java        |   4 +-
 .../syntax/jspwiki/JSPWikiSyntaxDecorator.java     |  16 ++++----
 .../syntax/jspwiki/JSPWikiTdDecorator.java         |   4 +-
 .../syntax/jspwiki/JSPWikiThDecorator.java         |   4 +-
 .../syntax/jspwiki/JSPWikiUlDecorator.java         |   4 +-
 .../java/org/apache/wiki/ui/AbstractCommand.java   |   2 +-
 .../main/resources/templates/default.properties    |   2 +
 .../main/resources/templates/default_es.properties |   2 +
 .../main/resources/templates/default_fr.properties |   2 +
 .../syntax/markdown/MarkdownBrDecorator.java       |   4 +-
 .../syntax/markdown/MarkdownCodeDecorator.java     |   4 +-
 .../syntax/markdown/MarkdownLiDecorator.java       |   6 +--
 .../syntax/markdown/MarkdownOlDecorator.java       |   4 +-
 .../markdown/MarkdownPlainTextBoldDecorator.java   |   5 +--
 .../markdown/MarkdownPlainTextCssDecorator.java    |   5 +--
 .../MarkdownPlainTextCssSpecialDecorator.java      |   5 +--
 .../markdown/MarkdownPlainTextItalicDecorator.java |   5 +--
 .../MarkdownPlainTextMonospaceDecorator.java       |   4 +-
 .../syntax/markdown/MarkdownSyntaxDecorator.java   |  16 ++++----
 .../syntax/markdown/MarkdownTdDecorator.java       |   4 +-
 .../syntax/markdown/MarkdownThDecorator.java       |   4 +-
 .../syntax/markdown/MarkdownUlDecorator.java       |   4 +-
 .../tomcat/woas.app/Contents/Java/bootstrap.jar    | Bin 34755 -> 34779 bytes
 .../tomcat/woas.app/Contents/Java/tomcat-juli.jar  | Bin 47109 -> 47110 bytes
 .../src/overlay/launchers/tomcat/woas.exe          | Bin 3680299 -> 3675327 bytes
 jspwiki-war/src/main/webapp/NewGroup.jsp           |  25 ++++--------
 jspwiki-war/src/main/webapp/UserPreferences.jsp    |  43 +++++++--------------
 .../src/main/webapp/templates/210/ProfileTab.jsp   |  10 ++---
 .../main/webapp/templates/default/ProfileTab.jsp   |  10 ++---
 pom.xml                                            |  18 ++++-----
 61 files changed, 220 insertions(+), 234 deletions(-)

[jspwiki] 04/06: Dependency updates

Posted by ju...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git

commit 92ccfaa937f6ae820770d8d17d95ba5b1319a8f6
Author: Juan Pablo Santos Rodríguez <ju...@gmail.com>
AuthorDate: Sun Feb 20 22:20:44 2022 +0100

    Dependency updates
    
        * Mockito 4.3.1
        * Selenide to 6.3.3
        * SLF4J to 1.7.36
        * Tika to 2.3.0
        * Tomcat to 9.0.58
        * Maven compiler (3.10.0), project info reports (3.2.0), javadocs (3.3.2) and cargo-maven3 (1.9.10) plugins
---
 .../tomcat/woas.app/Contents/Java/bootstrap.jar    | Bin 34755 -> 34779 bytes
 .../tomcat/woas.app/Contents/Java/tomcat-juli.jar  | Bin 47109 -> 47110 bytes
 .../src/overlay/launchers/tomcat/woas.exe          | Bin 3680299 -> 3675327 bytes
 pom.xml                                            |  18 +++++++++---------
 4 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/jspwiki-portable/src/overlay/launchers/tomcat/woas.app/Contents/Java/bootstrap.jar b/jspwiki-portable/src/overlay/launchers/tomcat/woas.app/Contents/Java/bootstrap.jar
index 8f8f086..c889579 100644
Binary files a/jspwiki-portable/src/overlay/launchers/tomcat/woas.app/Contents/Java/bootstrap.jar and b/jspwiki-portable/src/overlay/launchers/tomcat/woas.app/Contents/Java/bootstrap.jar differ
diff --git a/jspwiki-portable/src/overlay/launchers/tomcat/woas.app/Contents/Java/tomcat-juli.jar b/jspwiki-portable/src/overlay/launchers/tomcat/woas.app/Contents/Java/tomcat-juli.jar
index 3bd4872..718f199 100644
Binary files a/jspwiki-portable/src/overlay/launchers/tomcat/woas.app/Contents/Java/tomcat-juli.jar and b/jspwiki-portable/src/overlay/launchers/tomcat/woas.app/Contents/Java/tomcat-juli.jar differ
diff --git a/jspwiki-portable/src/overlay/launchers/tomcat/woas.exe b/jspwiki-portable/src/overlay/launchers/tomcat/woas.exe
index dfcd20e..5613e76 100644
Binary files a/jspwiki-portable/src/overlay/launchers/tomcat/woas.exe and b/jspwiki-portable/src/overlay/launchers/tomcat/woas.exe differ
diff --git a/pom.xml b/pom.xml
index 93ce240..1c04f9f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -69,29 +69,29 @@
     <junit.version>5.8.2</junit.version>
     <log4j2.version>2.17.1</log4j2.version>
     <lucene.version>8.11.1</lucene.version> <!-- 9.0.0 and above require JDK >= 11 to execute -->
-    <mockito.version>4.2.0</mockito.version>
+    <mockito.version>4.3.1</mockito.version>
     <nekohtml.version>1.9.22</nekohtml.version>
     <oro.version>2.0.8</oro.version>
     <sandler.version>0.5</sandler.version>
-    <selenide.version>6.2.0</selenide.version>
-    <slf4j.version>1.7.32</slf4j.version>
+    <selenide.version>6.3.3</selenide.version>
+    <slf4j.version>1.7.36</slf4j.version>
     <stripes.version>1.7.0-async-beta</stripes.version>
-    <tika.version>2.2.1</tika.version>
-    <tomcat.version>9.0.56</tomcat.version>
+    <tika.version>2.3.0</tika.version>
+    <tomcat.version>9.0.58</tomcat.version>
     <wro4j.version>1.8.0</wro4j.version> <!-- 1.9.0 and above require JDK >= 9 to execute -->
     <xmlrpc.version>2.0.1</xmlrpc.version>
 
     <plugin.antrun.version>3.0.0</plugin.antrun.version>
     <plugin.assembly.version>3.3.0</plugin.assembly.version>
     <plugin.clean.version>3.1.0</plugin.clean.version>
-    <plugin.compiler.version>3.9.0</plugin.compiler.version>
+    <plugin.compiler.version>3.10.0</plugin.compiler.version>
     <plugin.dependency.version>3.2.0</plugin.dependency.version>
     <plugin.enforcer.version>3.0.0</plugin.enforcer.version>
     <plugin.install.version>2.5.2</plugin.install.version>
     <plugin.jar.version>3.2.2</plugin.jar.version>
-    <plugin.javadoc.version>3.3.1</plugin.javadoc.version>
+    <plugin.javadoc.version>3.3.2</plugin.javadoc.version>
     <plugin.jxr.version>3.1.1</plugin.jxr.version>
-    <plugin.project-info-reports.version>3.1.2</plugin.project-info-reports.version>
+    <plugin.project-info-reports.version>3.2.0</plugin.project-info-reports.version>
     <plugin.release.version>3.0.0-M5</plugin.release.version>
     <plugin.resources.version>3.2.0</plugin.resources.version>
     <plugin.source.version>3.2.1</plugin.source.version>
@@ -101,7 +101,7 @@
     <plugin.jspc.version>3.2.0</plugin.jspc.version>
     <plugin.checksum.version>1.11</plugin.checksum.version>
     <plugin.jslint.version>1.0.1</plugin.jslint.version>
-    <plugin.cargo.version>1.9.9</plugin.cargo.version>
+    <plugin.cargo.version>1.9.10</plugin.cargo.version>
     <plugin.clirr.version>2.8</plugin.clirr.version>
     <plugin.cobertura.version>2.7</plugin.cobertura.version>
     <plugin.sonar.version>3.9.1.2184</plugin.sonar.version>

[jspwiki] 06/06: 2.11.2-git-04

Posted by ju...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git

commit a09f19ee6cebf531524eeae30dca06efb92301bf
Author: Juan Pablo Santos Rodríguez <ju...@gmail.com>
AuthorDate: Sun Feb 20 22:24:56 2022 +0100

    2.11.2-git-04
---
 ChangeLog.md                                            | 17 +++++++++++++++++
 .../src/main/java/org/apache/wiki/api/Release.java      |  2 +-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/ChangeLog.md b/ChangeLog.md
index b498717..ea1636c 100644
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -17,6 +17,23 @@ specific language governing permissions and limitations
 under the License.
 -->
 
+**2022-02-20  Juan Pablo Santos (juanpablo AT apache DOT org)**
+
+* _2.11.2-git-04_
+
+* [JSPWIKI-79](https://issues.apache.org/jira/browse/JSPWIKI-79) - Ounce Labs Security Finding: Authentication - Change Password
+
+* Refactored the `org.apache.wiki.htmltowiki` package, so it doesn't use `Stack` but instead a `Deque`. May split the package on the main module to its own module later on.
+
+* Dependency updates
+    * Mockito 4.3.1
+    * Selenide to 6.3.3
+    * SLF4J to 1.7.36
+    * Tika to 2.3.0
+    * Tomcat to 9.0.58
+    * Maven compiler (3.10.0), project info reports (3.2.0), javadocs (3.3.2) and cargo-maven3 (1.9.10) plugins
+
+
 **2022-01-13  Juan Pablo Santos (juanpablo AT apache DOT org)**
 
 * _2.11.2-git-03_
diff --git a/jspwiki-api/src/main/java/org/apache/wiki/api/Release.java b/jspwiki-api/src/main/java/org/apache/wiki/api/Release.java
index ea01664..6c7df62 100644
--- a/jspwiki-api/src/main/java/org/apache/wiki/api/Release.java
+++ b/jspwiki-api/src/main/java/org/apache/wiki/api/Release.java
@@ -69,7 +69,7 @@ public final class Release {
      *  <p>
      *  If the build identifier is empty, it is not added.
      */
-    public static final String     BUILD         = "03";
+    public static final String     BUILD         = "04";
 
     /**
      *  This is the generic version string you should use when printing out the version.  It is of

[jspwiki] 03/06: code format

Posted by ju...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git

commit 6513f074eb8af6293104942e4a9fc7123a44f567
Author: Juan Pablo Santos Rodríguez <ju...@gmail.com>
AuthorDate: Sun Feb 20 22:19:37 2022 +0100

    code format
---
 jspwiki-war/src/main/webapp/NewGroup.jsp        | 25 +++++---------
 jspwiki-war/src/main/webapp/UserPreferences.jsp | 43 +++++++++----------------
 2 files changed, 23 insertions(+), 45 deletions(-)

diff --git a/jspwiki-war/src/main/webapp/NewGroup.jsp b/jspwiki-war/src/main/webapp/NewGroup.jsp
index d4422ad..3fd4a0b 100644
--- a/jspwiki-war/src/main/webapp/NewGroup.jsp
+++ b/jspwiki-war/src/main/webapp/NewGroup.jsp
@@ -40,7 +40,7 @@
     Engine wiki = Wiki.engine().find( getServletConfig() );
     // Create wiki context and check for authorization
     Context wikiContext = Wiki.context().create( wiki, request, ContextEnum.WIKI_CREATE_GROUP.getRequestContext() );
-    if(!wiki.getManager( AuthorizationManager.class ).hasAccess( wikiContext, response )) return;
+    if( !wiki.getManager( AuthorizationManager.class ).hasAccess( wikiContext, response ) ) return;
     
     // Extract the current user, group name, members and action attributes
     Session wikiSession = wikiContext.getWikiSession();
@@ -56,40 +56,31 @@
     }
     
     // Are we saving the group?
-    if( "save".equals(request.getParameter("action")) )
-    {
+    if( "save".equals( request.getParameter( "action" ) ) ) {
         // Validate the group
         groupMgr.validateGroup( wikiContext, group );
         
-        try 
-        {
+        try {
             groupMgr.getGroup( group.getName() );
 
             // Oops! The group already exists. This is mischief!
             ResourceBundle rb = Preferences.getBundle( wikiContext, "CoreResources");
             wikiSession.addMessage( GroupManager.MESSAGES_KEY,
                                     MessageFormat.format(rb.getString("newgroup.exists"),group.getName()));
-        }
-        catch ( NoSuchPrincipalException e )
-        {
+        } catch( NoSuchPrincipalException e ) {
             // Group not found; this is good!
         }
 
         // If no errors, save the group now
-        if ( wikiSession.getMessages( GroupManager.MESSAGES_KEY ).length == 0 )
-        {
-            try
-            {
+        if( wikiSession.getMessages( GroupManager.MESSAGES_KEY ).length == 0 ) {
+            try {
                 groupMgr.setGroup( wikiSession, group );
-            }
-            catch( WikiSecurityException e )
-            {
+            } catch( WikiSecurityException e ) {
                 // Something went horribly wrong! Maybe it's an I/O error...
                 wikiSession.addMessage( GroupManager.MESSAGES_KEY, e.getMessage() );
             }
         }
-        if ( wikiSession.getMessages( GroupManager.MESSAGES_KEY ).length == 0 )
-        {
+        if ( wikiSession.getMessages( GroupManager.MESSAGES_KEY ).length == 0 ) {
             response.sendRedirect( "Group.jsp?group=" + group.getName() );
             return;
         }
diff --git a/jspwiki-war/src/main/webapp/UserPreferences.jsp b/jspwiki-war/src/main/webapp/UserPreferences.jsp
index b333807..b4e0fe2 100644
--- a/jspwiki-war/src/main/webapp/UserPreferences.jsp
+++ b/jspwiki-war/src/main/webapp/UserPreferences.jsp
@@ -49,7 +49,7 @@
     Engine wiki = Wiki.engine().find( getServletConfig() );
     // Create wiki context and check for authorization
     Context wikiContext = Wiki.context().create( wiki, request, ContextEnum.WIKI_PREFS.getRequestContext() );
-    if(!wiki.getManager( AuthorizationManager.class ).hasAccess( wikiContext, response ) ) return;
+    if( !wiki.getManager( AuthorizationManager.class ).hasAccess( wikiContext, response ) ) return;
     
     // Extract the user profile and action attributes
     UserManager userMgr = wiki.getManager( UserManager.class );
@@ -64,58 +64,46 @@
 */
 
     // Are we saving the profile?
-    if( "saveProfile".equals(request.getParameter("action")) )
-    {
+    if( "saveProfile".equals( request.getParameter( "action" ) ) ) {
         UserProfile profile = userMgr.parseProfile( wikiContext );
-         
+
         // Validate the profile
         userMgr.validateProfile( wikiContext, profile );
 
         // If no errors, save the profile now & refresh the principal set!
-        if ( wikiSession.getMessages( "profile" ).length == 0 )
-        {
-            try
-            {
+        if( wikiSession.getMessages( "profile" ).length == 0 ) {
+            try {
                 userMgr.setUserProfile( wikiContext, profile );
                 CookieAssertionLoginModule.setUserCookie( response, profile.getFullname() );
-            }
-            catch( DuplicateUserException due )
-            {
+            } catch( DuplicateUserException due ) {
                 // User collision! (full name or wiki name already taken)
                 wikiSession.addMessage( "profile", wiki.getManager( InternationalizationManager.class )
                                                        .get( InternationalizationManager.CORE_BUNDLE,
                                                     		 Preferences.getLocale( wikiContext ), 
                                                              due.getMessage(), due.getArgs() ) );
-            }
-            catch( DecisionRequiredException e )
-            {
+            } catch( DecisionRequiredException e ) {
                 String redirect = wiki.getURL( ContextEnum.PAGE_VIEW.getRequestContext(), "ApprovalRequiredForUserProfiles", null );
                 response.sendRedirect( redirect );
                 return;
-            }
-            catch( WikiSecurityException e )
-            {
+            } catch( WikiSecurityException e ) {
                 // Something went horribly wrong! Maybe it's an I/O error...
                 wikiSession.addMessage( "profile", e.getMessage() );
             }
         }
-        if ( wikiSession.getMessages( "profile" ).length == 0 )
-        {
+        if( wikiSession.getMessages( "profile" ).length == 0 ) {
             String redirectPage = request.getParameter( "redirect" );
 
-            if( !wiki.getManager( PageManager.class ).wikiPageExists( redirectPage ) )
-            {
+            if( !wiki.getManager( PageManager.class ).wikiPageExists( redirectPage ) ) {
                redirectPage = wiki.getFrontPage();
             }
-            
+
             String viewUrl = ( "UserPreferences".equals( redirectPage ) ) ? "Wiki.jsp" : wikiContext.getViewURL( redirectPage );
-            log.info( "Redirecting user to " + viewUrl );
+            log.info( "Redirecting user to {}", viewUrl );
             response.sendRedirect( viewUrl );
             return;
         }
     }
-    if( "setAssertedName".equals( request.getParameter( "action" ) ) )
-    {
+    if( "setAssertedName".equals( request.getParameter( "action" ) ) ) {
         Preferences.reloadPreferences( pageContext );
         
         String assertedName = request.getParameter( "assertedName" );
@@ -128,12 +116,11 @@
         }
         String viewUrl = ( "UserPreferences".equals( redirectPage ) ) ? "Wiki.jsp" : wikiContext.getViewURL( redirectPage );
 
-        log.info( "Redirecting user to " + viewUrl );
+        log.info( "Redirecting user to {}", viewUrl );
         response.sendRedirect( viewUrl );
         return;
     }
-    if( "clearAssertedName".equals( request.getParameter( "action" ) ) )
-    {
+    if( "clearAssertedName".equals( request.getParameter( "action" ) ) ) {
         HttpUtil.clearCookie( response, Preferences.COOKIE_USER_PREFS_NAME );
         CookieAssertionLoginModule.clearUserCookie( response );
         Preferences.reloadPreferences( pageContext );

[jspwiki] 02/06: javadoc fixes

Posted by ju...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git

commit a91f9cdd8d8d15b6bdf58fe5cce3c2b9a69916ee
Author: Juan Pablo Santos Rodríguez <ju...@gmail.com>
AuthorDate: Sun Feb 20 22:18:08 2022 +0100

    javadoc fixes
---
 .../java/org/apache/wiki/api/core/Command.java     |  8 +++----
 .../java/org/apache/wiki/api/core/Context.java     | 26 +++++++++++-----------
 .../wiki/auth/user/AbstractUserDatabase.java       |  7 +++---
 .../java/org/apache/wiki/ui/AbstractCommand.java   |  2 +-
 4 files changed, 21 insertions(+), 22 deletions(-)

diff --git a/jspwiki-api/src/main/java/org/apache/wiki/api/core/Command.java b/jspwiki-api/src/main/java/org/apache/wiki/api/core/Command.java
index 38b14d3..dfbd0ce 100644
--- a/jspwiki-api/src/main/java/org/apache/wiki/api/core/Command.java
+++ b/jspwiki-api/src/main/java/org/apache/wiki/api/core/Command.java
@@ -27,13 +27,13 @@ import java.security.Permission;
  * <p> Commands come in two flavors: "static" and "targeted." </p>
  * <ul>
  * <li><strong>Static commands</strong> are exactly what they sound like: static. They are <code>final</code>, threadsafe, and immutable.
- * They have no intrinsic idea of the context they are acting in. For example, the static command {@link org.apache.wiki.ui.PageCommand#VIEW} embodies the
+ * They have no intrinsic idea of the context they are acting in. For example, the static command {@code org.apache.wiki.ui.PageCommand#VIEW} embodies the
  * idea of viewing a page &#8212; but exactly <em>which</em> page is left undefined. Static commands exist so that they can be freely
  * shared and passed around without incurring the penalties of object creation. Static commands are a lot like naked request contexts
  * ("edit", "view", etc.) except that they include additional, essential properties such as the associated URL pattern and content JSP.</li>
  * <li><strong>Targeted commands</strong> "decorate" static commands by scoping a static Command at a specific target such as a WikiPage or
  * GroupPrincipal. Targeted commands are created by calling an existing Command's {@link #targetedCommand(Object)} and supplying the target
- * object. Implementing classes generally require a specific target type. For example, the {@link org.apache.wiki.ui.PageCommand} class requires that the
+ * object. Implementing classes generally require a specific target type. For example, the {@code org.apache.wiki.ui.PageCommand} class requires that the
  * target object be of type {@link org.apache.wiki.api.core.Page}.</li>
  * </ul>
  * <p> Concrete implementations of Command include: </p>
@@ -103,9 +103,9 @@ public interface Command {
 
     /**
      * Returns the Permission required to successfully execute this Command. If no Permission is requred, this method returns
-     * <code>null</code>. For example, the static command {@link org.apache.wiki.ui.PageCommand#VIEW} doesn't require a permission because
+     * <code>null</code>. For example, the static command {@code org.apache.wiki.ui.PageCommand#VIEW} doesn't require a permission because
      * it isn't referring to a particular WikiPage. However, if this command targets a WikiPage called <code>Main</code>(via
-     * {@link org.apache.wiki.ui.PageCommand#targetedCommand(Object)}, the resulting Command would require the permission
+     * {@code org.apache.wiki.ui.PageCommand#targetedCommand(Object)}, the resulting Command would require the permission
      * <code>PagePermission "<em>yourWiki</em>:Main", "view"</code>.
      *
      * @return the required permission, or <code>null</code> if not required
diff --git a/jspwiki-api/src/main/java/org/apache/wiki/api/core/Context.java b/jspwiki-api/src/main/java/org/apache/wiki/api/core/Context.java
index f131ac8..6bd0901 100644
--- a/jspwiki-api/src/main/java/org/apache/wiki/api/core/Context.java
+++ b/jspwiki-api/src/main/java/org/apache/wiki/api/core/Context.java
@@ -35,7 +35,7 @@ import java.security.Principal;
  *  object.</p>
  *  <p>Do not cache the WikiPage object that you get from the WikiContext; always use getPage()!</p>
  *
- *  @see org.apache.wiki.plugin.Counter
+ *  @see {@code org.apache.wiki.plugin.Counter}
  */
 public interface Context extends Cloneable, Command {
 
@@ -43,7 +43,7 @@ public interface Context extends Cloneable, Command {
 
     /**
      *  Variable name which tells whether plugins should be executed or not. Value can be either {@code Boolean.TRUE} or
-     *  {@code Boolean.FALSE}. While not set it's value is {@code null}.
+     *  {@code Boolean.FALSE}. While not set its value is {@code null}.
      */
     String VAR_EXECUTE_PLUGINS = "_PluginContent.execute";
 
@@ -75,8 +75,8 @@ public interface Context extends Cloneable, Command {
      *  the Main page.  However, getRealPage() will return "LeftMenu".
      *
      *  @return A reference to the real page.
-     *  @see org.apache.wiki.tags.InsertPageTag
-     *  @see org.apache.wiki.parser.JSPWikiMarkupParser
+     *  @see {@code org.apache.wiki.tags.InsertPageTag}
+     *  @see {@code org.apache.wiki.parser.JSPWikiMarkupParser}
      */
     Page getRealPage();
 
@@ -93,7 +93,7 @@ public interface Context extends Cloneable, Command {
      *  @param wikiPage  The real WikiPage which is being rendered.
      *  @return The previous real page
      *  @since 2.3.14
-     *  @see org.apache.wiki.tags.InsertPageTag
+     *  @see {@code org.apache.wiki.tags.InsertPageTag}
      */
     Page setRealPage( Page wikiPage );
 
@@ -140,7 +140,7 @@ public interface Context extends Cloneable, Command {
 
     /**
      *  This method will safely return any HTTP parameters that might have been defined.  You should use this method instead
-     *  of peeking directly into the result of getHttpRequest(), since this method is smart enough to do all of the right things,
+     *  of peeking directly into the result of getHttpRequest(), since this method is smart enough to do all the right things,
      *  figure out UTF-8 encoded parameters, etc.
      *
      *  @since 2.0.13.
@@ -150,8 +150,8 @@ public interface Context extends Cloneable, Command {
     String getHttpParameter( String paramName );
 
     /**
-     *  If the request did originate from a HTTP request, then the HTTP request can be fetched here.  However, it the request
-     *  did NOT originate from a HTTP request, then this method will return null, and YOU SHOULD CHECK FOR IT!
+     *  If the request did originate from an HTTP request, then the HTTP request can be fetched here.  However, if the request
+     *  did NOT originate from an HTTP request, then this method will return null, and YOU SHOULD CHECK FOR IT!
      *
      *  @return Null, if no HTTP request was done.
      *  @since 2.0.13.
@@ -203,7 +203,7 @@ public interface Context extends Cloneable, Command {
      *  A shortcut to generate a VIEW url.
      *
      *  @param WikiPage The WikiPage to which to link.
-     *  @return An URL to the page.  This honours the current absolute/relative setting.
+     *  @return A URL to the page.  This honours the current absolute/relative setting.
      */
     String getViewURL( String WikiPage );
 
@@ -223,25 +223,25 @@ public interface Context extends Cloneable, Command {
     Command getCommand();
 
     /**
-     *  Creates an URL for the given request context.
+     *  Creates a URL for the given request context.
      *
      *  @param context e.g. WikiContext.EDIT
      *  @param page The WikiPage to which to link
-     *  @return An URL to the page.
+     *  @return A URL to the page.
      */
     default String getURL( final String context, final String page ) {
         return getURL( context, page, null );
     }
 
     /**
-     *  Returns an URL from a page. It this Context instance was constructed with an actual HttpServletRequest, we will attempt to
+     *  Returns a URL from a page. It this Context instance was constructed with an actual HttpServletRequest, we will attempt to
      *  construct the URL using HttpUtil, which preserves the HTTPS portion if it was used.
      *
      *  @param context The request context (e.g. WikiContext.UPLOAD)
      *  @param page The WikiPage to which to link
      *  @param params A list of parameters, separated with "&amp;"
      *
-     *  @return An URL to the given context and page.
+     *  @return A URL to the given context and page.
      */
     default String getURL( final String context, final String page, final String params ) {
         // FIXME: is rather slow
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/auth/user/AbstractUserDatabase.java b/jspwiki-main/src/main/java/org/apache/wiki/auth/user/AbstractUserDatabase.java
index 028f477..7a8d36f 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/auth/user/AbstractUserDatabase.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/auth/user/AbstractUserDatabase.java
@@ -189,7 +189,7 @@ public abstract class AbstractUserDatabase implements UserDatabase {
      */
     @Override
     public boolean validatePassword( final String loginName, final String password ) {
-        String hashedPassword;
+        final String hashedPassword;
         try {
             final UserProfile profile = findByLoginName( loginName );
             String storedPassword = profile.getPassword();
@@ -252,14 +252,13 @@ public abstract class AbstractUserDatabase implements UserDatabase {
      * calculates a <em>salted</em> hash rather than a plain hash.
      *
      * @param text the text to hash
-     * @param text the algorithm used for the hash
      * @return the result hash
      */
     protected String getHash( final String text ) {
         try {
             return CryptoUtil.getSaltedPassword( text.getBytes(StandardCharsets.UTF_8), SHA256_PREFIX );
         } catch( final NoSuchAlgorithmException e ) {
-            log.error( String.format( "Error creating salted password hash: %s", e.getMessage() ) );
+            log.error( "Error creating salted password hash: {}", e.getMessage() );
             return text;
         }
     }
@@ -269,7 +268,7 @@ public abstract class AbstractUserDatabase implements UserDatabase {
      *
      * @param text the text to hash
      * @return the result hash
-     * @deprecated this method is retained for backwards compatibility purposes; use {@link #getHash(String, String)} instead
+     * @deprecated this method is retained for backwards compatibility purposes; use {@link #getHash(String)} instead
      */
     @Deprecated
     String getShaHash(final String text ) {
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/ui/AbstractCommand.java b/jspwiki-main/src/main/java/org/apache/wiki/ui/AbstractCommand.java
index fc09d5e..869de6b 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/ui/AbstractCommand.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/ui/AbstractCommand.java
@@ -42,7 +42,7 @@ public abstract class AbstractCommand implements Command {
     /**
      * Constructs a new Command with a specified wiki context, URL pattern, content template and target. The URL pattern is used to derive
      * the JSP; if it is a "local" JSP (that is, it does not contain the <code>http://</code> or <code>https://</code> prefixes),
-     * then the JSP will be a cleansed version of the URL pattern; symbols (such as <code>%u</code>) will removed. If it the supplied
+     * then the JSP will be a cleansed version of the URL pattern; symbols (such as <code>%u</code>) will be removed. If the supplied
      * URL pattern points to a non-local destination, the JSP will be set to the value supplied, unmodified.
      *
      * @param requestContext the request context

[jspwiki] 01/06: Refactored the org.apache.wiki.htmltowiki package,

Posted by ju...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git

commit 63c82a09a8bae091b8fd4b248181689c4bba2b25
Author: Juan Pablo Santos Rodríguez <ju...@gmail.com>
AuthorDate: Sun Feb 20 22:16:25 2022 +0100

    Refactored the org.apache.wiki.htmltowiki package,
    
    so it doesn't use Stack but instead a Deque. May split the package on the main module to its own module later on.
---
 .../org/apache/wiki/htmltowiki/SyntaxDecorator.java    |  4 ++--
 .../wiki/htmltowiki/XHtmlElementToWikiTranslator.java  | 18 +++++++++---------
 .../org/apache/wiki/htmltowiki/syntax/BrDecorator.java |  6 +++---
 .../apache/wiki/htmltowiki/syntax/CodeDecorator.java   | 10 +++++-----
 .../org/apache/wiki/htmltowiki/syntax/LiDecorator.java |  8 ++++----
 .../org/apache/wiki/htmltowiki/syntax/OlDecorator.java | 10 +++++-----
 .../wiki/htmltowiki/syntax/PlainTextBoldDecorator.java |  5 +----
 .../wiki/htmltowiki/syntax/PlainTextCssDecorator.java  |  5 +----
 .../syntax/PlainTextCssSpecialDecorator.java           |  5 +----
 .../wiki/htmltowiki/syntax/PlainTextDecorator.java     |  5 +----
 .../htmltowiki/syntax/PlainTextItalicDecorator.java    |  5 +----
 .../htmltowiki/syntax/PlainTextMonospaceDecorator.java | 10 +++++-----
 .../org/apache/wiki/htmltowiki/syntax/TdDecorator.java |  6 +++---
 .../wiki/htmltowiki/syntax/TextElementDecorator.java   |  6 +++---
 .../org/apache/wiki/htmltowiki/syntax/ThDecorator.java |  6 +++---
 .../org/apache/wiki/htmltowiki/syntax/UlDecorator.java | 10 +++++-----
 .../wiki/htmltowiki/syntax/WikiSyntaxDecorator.java    |  4 ++--
 .../htmltowiki/syntax/jspwiki/JSPWikiBrDecorator.java  |  4 ++--
 .../syntax/jspwiki/JSPWikiCodeDecorator.java           |  4 ++--
 .../htmltowiki/syntax/jspwiki/JSPWikiLiDecorator.java  | 14 ++++++++++----
 .../htmltowiki/syntax/jspwiki/JSPWikiOlDecorator.java  |  4 ++--
 .../syntax/jspwiki/JSPWikiPlainTextBoldDecorator.java  |  5 ++---
 .../syntax/jspwiki/JSPWikiPlainTextCssDecorator.java   |  5 ++---
 .../jspwiki/JSPWikiPlainTextCssSpecialDecorator.java   |  5 ++---
 .../jspwiki/JSPWikiPlainTextItalicDecorator.java       |  5 ++---
 .../jspwiki/JSPWikiPlainTextMonospaceDecorator.java    |  4 ++--
 .../syntax/jspwiki/JSPWikiSyntaxDecorator.java         | 16 ++++++++--------
 .../htmltowiki/syntax/jspwiki/JSPWikiTdDecorator.java  |  4 ++--
 .../htmltowiki/syntax/jspwiki/JSPWikiThDecorator.java  |  4 ++--
 .../htmltowiki/syntax/jspwiki/JSPWikiUlDecorator.java  |  4 ++--
 .../syntax/markdown/MarkdownBrDecorator.java           |  4 ++--
 .../syntax/markdown/MarkdownCodeDecorator.java         |  4 ++--
 .../syntax/markdown/MarkdownLiDecorator.java           |  6 +++---
 .../syntax/markdown/MarkdownOlDecorator.java           |  4 ++--
 .../markdown/MarkdownPlainTextBoldDecorator.java       |  5 ++---
 .../syntax/markdown/MarkdownPlainTextCssDecorator.java |  5 ++---
 .../markdown/MarkdownPlainTextCssSpecialDecorator.java |  5 ++---
 .../markdown/MarkdownPlainTextItalicDecorator.java     |  5 ++---
 .../markdown/MarkdownPlainTextMonospaceDecorator.java  |  4 ++--
 .../syntax/markdown/MarkdownSyntaxDecorator.java       | 16 ++++++++--------
 .../syntax/markdown/MarkdownTdDecorator.java           |  4 ++--
 .../syntax/markdown/MarkdownThDecorator.java           |  4 ++--
 .../syntax/markdown/MarkdownUlDecorator.java           |  4 ++--
 43 files changed, 127 insertions(+), 144 deletions(-)

diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/SyntaxDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/SyntaxDecorator.java
index 1fc4a19..150336b 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/SyntaxDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/SyntaxDecorator.java
@@ -23,8 +23,8 @@ import org.jdom2.JDOMException;
 import org.jdom2.Text;
 
 import java.io.PrintWriter;
+import java.util.Deque;
 import java.util.Map;
-import java.util.Stack;
 
 
 /**
@@ -42,7 +42,7 @@ public interface SyntaxDecorator {
      * @param config xhtml to wiki configuration object.
      * @param chain chain (in the chain of responsabilities pattern) that is expected to be called by the different xhtml decorations.
      */
-    void init( PrintWriter out, Stack< String > liStack, Stack< String > preStack, WhitespaceTrimWriter outTrimmer, XHtmlToWikiConfig config, XHtmlElementToWikiTranslator chain );
+    void init( PrintWriter out, Deque< String > liStack, Deque< String > preStack, WhitespaceTrimWriter outTrimmer, XHtmlToWikiConfig config, XHtmlElementToWikiTranslator chain );
 
     /**
      * Decorates an {@code a} element.
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/XHtmlElementToWikiTranslator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/XHtmlElementToWikiTranslator.java
index bef1843..7229fd5 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/XHtmlElementToWikiTranslator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/XHtmlElementToWikiTranslator.java
@@ -32,10 +32,11 @@ import org.jdom2.Text;
 import org.jdom2.xpath.XPathFactory;
 
 import java.io.PrintWriter;
+import java.util.ArrayDeque;
 import java.util.Arrays;
+import java.util.Deque;
 import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.Stack;
 
 
 /**
@@ -73,8 +74,8 @@ public class XHtmlElementToWikiTranslator {
         this.config = config;
         syntax = getSyntaxDecorator();
         final PrintWriter out = new PrintWriter( outTrimmer );
-        final Stack< String > liStack = new Stack<>();
-        final Stack< String > preStack = new PreStack();
+        final Deque< String > liStack = new ArrayDeque<>();
+        final Deque< String > preStack = new PreDeque();
 
         syntax.init( out, liStack, preStack, outTrimmer, config, this );
         translate( base );
@@ -358,18 +359,17 @@ public class XHtmlElementToWikiTranslator {
         return dto;
     }
 
-    private class PreStack extends Stack< String > {
+    private class PreDeque extends ArrayDeque< String > {
 
         @Override
-        public String push( final String item ) {
-            final String push = super.push( item );
+        public void addFirst( final String item ) {
+            super.addFirst( item );
             outTrimmer.setWhitespaceTrimMode( isEmpty() );
-            return push;
         }
 
         @Override
-        public synchronized String pop() {
-            final String pop = super.pop();
+        public String removeFirst() {
+            final String pop = super.removeFirst();
             outTrimmer.setWhitespaceTrimMode( isEmpty() );
             return pop;
         }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/BrDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/BrDecorator.java
index 4a4a011..dd851b0 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/BrDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/BrDecorator.java
@@ -23,7 +23,7 @@ import org.jdom2.Element;
 import org.jdom2.JDOMException;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -32,10 +32,10 @@ import java.util.Stack;
 public abstract class BrDecorator {
 
     final protected PrintWriter out;
-    final protected Stack< String > preStack;
+    final protected Deque< String > preStack;
     final protected XHtmlElementToWikiTranslator chain;
 
-    protected BrDecorator( final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    protected BrDecorator( final PrintWriter out, final Deque< String > preStack, final XHtmlElementToWikiTranslator chain ) {
         this.out = out;
         this.preStack = preStack;
         this.chain = chain;
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/CodeDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/CodeDecorator.java
index 1afb969..a17af6a 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/CodeDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/CodeDecorator.java
@@ -23,7 +23,7 @@ import org.jdom2.Element;
 import org.jdom2.JDOMException;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -32,10 +32,10 @@ import java.util.Stack;
 public abstract class CodeDecorator {
 
     final protected PrintWriter out;
-    final protected Stack< String > preStack;
+    final protected Deque< String > preStack;
     final protected XHtmlElementToWikiTranslator chain;
 
-    protected CodeDecorator( final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    protected CodeDecorator( final PrintWriter out, final Deque< String > preStack, final XHtmlElementToWikiTranslator chain ) {
         this.out = out;
         this.preStack = preStack;
         this.chain = chain;
@@ -48,9 +48,9 @@ public abstract class CodeDecorator {
      */
     public void decorate( final Element e ) throws JDOMException {
         out.print( markupCodeOpen() );
-        preStack.push( markupCodeOpen() );
+        preStack.addFirst( markupCodeOpen() );
         chain.translate( e );
-        preStack.pop();
+        preStack.removeFirst();
         out.print( markupCodeClose() );
         // NOTE: don't print a newline after the closing brackets because if the Text is inside
         // a table or list, it would break it if there was a subsequent row or list item.
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/LiDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/LiDecorator.java
index 6b1f8bd..23f49ce 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/LiDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/LiDecorator.java
@@ -23,7 +23,7 @@ import org.jdom2.Element;
 import org.jdom2.JDOMException;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -32,10 +32,10 @@ import java.util.Stack;
 public abstract class LiDecorator {
 
     final protected PrintWriter out;
-    final protected Stack< String > liStack;
+    final protected Deque< String > liStack;
     final protected XHtmlElementToWikiTranslator chain;
 
-    protected LiDecorator( final PrintWriter out, final Stack< String > liStack, final XHtmlElementToWikiTranslator chain ) {
+    protected LiDecorator( final PrintWriter out, final Deque< String > liStack, final XHtmlElementToWikiTranslator chain ) {
         this.out = out;
         this.liStack = liStack;
         this.chain = chain;
@@ -67,6 +67,6 @@ public abstract class LiDecorator {
      *
      * @return Wiki markup for a {@code LI} element.
      */
-    protected abstract String markupLi( Stack< String > liStack );
+    protected abstract String markupLi( Deque< String > liStack );
 
 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/OlDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/OlDecorator.java
index 2310271..bf6ab79 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/OlDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/OlDecorator.java
@@ -23,7 +23,7 @@ import org.jdom2.Element;
 import org.jdom2.JDOMException;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -32,10 +32,10 @@ import java.util.Stack;
 public abstract class OlDecorator {
 
     final protected PrintWriter out;
-    final protected Stack< String > liStack;
+    final protected Deque< String > liStack;
     final protected XHtmlElementToWikiTranslator chain;
 
-    protected OlDecorator( final PrintWriter out, final Stack< String > liStack, final XHtmlElementToWikiTranslator chain ) {
+    protected OlDecorator( final PrintWriter out, final Deque< String > liStack, final XHtmlElementToWikiTranslator chain ) {
         this.out = out;
         this.liStack = liStack;
         this.chain = chain;
@@ -48,9 +48,9 @@ public abstract class OlDecorator {
      */
     public void decorate( final Element e ) throws JDOMException {
         out.println();
-        liStack.push( markupOl() );
+        liStack.addFirst( markupOl() );
         chain.translate( e );
-        liStack.pop();
+        liStack.removeFirst();
     }
 
     /**
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextBoldDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextBoldDecorator.java
index 609b835..b51cdc3 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextBoldDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextBoldDecorator.java
@@ -23,7 +23,6 @@ import org.jdom2.Element;
 import org.jdom2.JDOMException;
 
 import java.io.PrintWriter;
-import java.util.Stack;
 
 
 /**
@@ -32,13 +31,11 @@ import java.util.Stack;
 public abstract class PlainTextBoldDecorator {
 
     final protected PrintWriter out;
-    final protected Stack< String > preStack;
     final protected XHtmlElementToWikiTranslator chain;
     final protected PlainTextItalicDecorator ptid;
 
-    protected PlainTextBoldDecorator( final PlainTextItalicDecorator ptid, final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    protected PlainTextBoldDecorator( final PlainTextItalicDecorator ptid, final PrintWriter out, final XHtmlElementToWikiTranslator chain ) {
         this.out = out;
-        this.preStack = preStack;
         this.chain = chain;
         this.ptid = ptid;
     }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextCssDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextCssDecorator.java
index 5513913..c8d1a66 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextCssDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextCssDecorator.java
@@ -22,7 +22,6 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.jdom2.JDOMException;
 
 import java.io.PrintWriter;
-import java.util.Stack;
 
 
 /**
@@ -31,13 +30,11 @@ import java.util.Stack;
 public abstract class PlainTextCssDecorator {
 
     final protected PrintWriter out;
-    final protected Stack< String > preStack;
     final protected XHtmlElementToWikiTranslator chain;
     final protected PlainTextBoldDecorator ptbd;
 
-    protected PlainTextCssDecorator( final PlainTextBoldDecorator ptbd, final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    protected PlainTextCssDecorator( final PlainTextBoldDecorator ptbd, final PrintWriter out, final XHtmlElementToWikiTranslator chain ) {
         this.out = out;
-        this.preStack = preStack;
         this.chain = chain;
         this.ptbd = ptbd;
     }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextCssSpecialDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextCssSpecialDecorator.java
index 29dc157..ac8c389 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextCssSpecialDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextCssSpecialDecorator.java
@@ -22,7 +22,6 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.jdom2.JDOMException;
 
 import java.io.PrintWriter;
-import java.util.Stack;
 
 
 /**
@@ -31,12 +30,10 @@ import java.util.Stack;
 public abstract class PlainTextCssSpecialDecorator {
 
     final protected PrintWriter out;
-    final protected Stack< String > preStack;
     final protected XHtmlElementToWikiTranslator chain;
 
-    protected PlainTextCssSpecialDecorator( final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    protected PlainTextCssSpecialDecorator( final PrintWriter out, final XHtmlElementToWikiTranslator chain ) {
         this.out = out;
-        this.preStack = preStack;
         this.chain = chain;
     }
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextDecorator.java
index ae45168..1381d5d 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextDecorator.java
@@ -22,7 +22,6 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.jdom2.JDOMException;
 
 import java.io.PrintWriter;
-import java.util.Stack;
 
 
 /**
@@ -38,13 +37,11 @@ import java.util.Stack;
 public class PlainTextDecorator {
 
     final protected PrintWriter out;
-    final protected Stack< String > preStack;
     final protected XHtmlElementToWikiTranslator chain;
     final protected PlainTextCssDecorator ptcd;
 
-    public PlainTextDecorator( final PlainTextCssDecorator ptcd, final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    public PlainTextDecorator( final PlainTextCssDecorator ptcd, final PrintWriter out, final XHtmlElementToWikiTranslator chain ) {
         this.out = out;
-        this.preStack = preStack;
         this.chain = chain;
         this.ptcd = ptcd;
     }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextItalicDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextItalicDecorator.java
index 1695d9d..4946f65 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextItalicDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextItalicDecorator.java
@@ -23,7 +23,6 @@ import org.jdom2.Element;
 import org.jdom2.JDOMException;
 
 import java.io.PrintWriter;
-import java.util.Stack;
 
 
 /**
@@ -32,13 +31,11 @@ import java.util.Stack;
 public abstract class PlainTextItalicDecorator {
 
     final protected PrintWriter out;
-    final protected Stack< String > preStack;
     final protected XHtmlElementToWikiTranslator chain;
     final protected PlainTextMonospaceDecorator ptmd;
 
-    protected PlainTextItalicDecorator( final PlainTextMonospaceDecorator ptmd, final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    protected PlainTextItalicDecorator( final PlainTextMonospaceDecorator ptmd, final PrintWriter out, final XHtmlElementToWikiTranslator chain ) {
         this.out = out;
-        this.preStack = preStack;
         this.chain = chain;
         this.ptmd = ptmd;
     }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextMonospaceDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextMonospaceDecorator.java
index c671c0d..b188651 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextMonospaceDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/PlainTextMonospaceDecorator.java
@@ -23,7 +23,7 @@ import org.jdom2.Element;
 import org.jdom2.JDOMException;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -32,11 +32,11 @@ import java.util.Stack;
 public abstract class PlainTextMonospaceDecorator {
 
     final protected PrintWriter out;
-    final protected Stack< String > preStack;
+    final protected Deque< String > preStack;
     final protected XHtmlElementToWikiTranslator chain;
     final protected PlainTextCssSpecialDecorator ptcsd;
 
-    protected PlainTextMonospaceDecorator( final PlainTextCssSpecialDecorator ptcsd, final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    protected PlainTextMonospaceDecorator( final PlainTextCssSpecialDecorator ptcsd, final PrintWriter out, final Deque< String > preStack, final XHtmlElementToWikiTranslator chain ) {
         this.out = out;
         this.preStack = preStack;
         this.chain = chain;
@@ -51,11 +51,11 @@ public abstract class PlainTextMonospaceDecorator {
     public void decorate( final XHtmlElementToWikiTranslator.ElementDecoratorData dto ) throws JDOMException {
         if( dto.monospace ) {
             out.print( markupMonospaceOpen() );
-            preStack.push( markupMonospaceOpen() );
+            preStack.addFirst( markupMonospaceOpen() );
         }
         ptcsd.decorate( dto );
         if( dto.monospace ) {
-            preStack.pop();
+            preStack.removeFirst();
             out.print( markupMonospaceClose() );
         }
     }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/TdDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/TdDecorator.java
index 5793725..561e1d0 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/TdDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/TdDecorator.java
@@ -23,7 +23,7 @@ import org.jdom2.Element;
 import org.jdom2.JDOMException;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -32,10 +32,10 @@ import java.util.Stack;
 public abstract class TdDecorator {
 
     final protected PrintWriter out;
-    final protected Stack< String > preStack;
+    final protected Deque< String > preStack;
     final protected XHtmlElementToWikiTranslator chain;
 
-    protected TdDecorator( final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    protected TdDecorator( final PrintWriter out, final Deque< String > preStack, final XHtmlElementToWikiTranslator chain ) {
         this.out = out;
         this.preStack = preStack;
         this.chain = chain;
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/TextElementDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/TextElementDecorator.java
index 49d0730..62b6b5f 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/TextElementDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/TextElementDecorator.java
@@ -21,7 +21,7 @@ package org.apache.wiki.htmltowiki.syntax;
 import org.jdom2.Text;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -30,9 +30,9 @@ import java.util.Stack;
 public class TextElementDecorator {
 
     final protected PrintWriter out;
-    final protected Stack< String > preStack;
+    final protected Deque< String > preStack;
 
-    public TextElementDecorator( final PrintWriter out, final Stack< String > preStack ) {
+    public TextElementDecorator( final PrintWriter out, final Deque< String > preStack ) {
         this.out = out;
         this.preStack = preStack;
     }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/ThDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/ThDecorator.java
index 0b571ad..00d588b 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/ThDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/ThDecorator.java
@@ -23,7 +23,7 @@ import org.jdom2.Element;
 import org.jdom2.JDOMException;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -32,10 +32,10 @@ import java.util.Stack;
 public abstract class ThDecorator {
 
     final protected PrintWriter out;
-    final protected Stack< String > preStack;
+    final protected Deque< String > preStack;
     final protected XHtmlElementToWikiTranslator chain;
 
-    protected ThDecorator( final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    protected ThDecorator( final PrintWriter out, final Deque< String > preStack, final XHtmlElementToWikiTranslator chain ) {
         this.out = out;
         this.preStack = preStack;
         this.chain = chain;
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/UlDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/UlDecorator.java
index 30a11d7..3f5267e 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/UlDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/UlDecorator.java
@@ -23,7 +23,7 @@ import org.jdom2.Element;
 import org.jdom2.JDOMException;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -32,10 +32,10 @@ import java.util.Stack;
 public abstract class UlDecorator {
 
     final protected PrintWriter out;
-    final protected Stack< String > liStack;
+    final protected Deque< String > liStack;
     final protected XHtmlElementToWikiTranslator chain;
 
-    protected UlDecorator( final PrintWriter out, final Stack< String > liStack, final XHtmlElementToWikiTranslator chain ) {
+    protected UlDecorator( final PrintWriter out, final Deque< String > liStack, final XHtmlElementToWikiTranslator chain ) {
         this.out = out;
         this.liStack = liStack;
         this.chain = chain;
@@ -48,9 +48,9 @@ public abstract class UlDecorator {
      */
     public void decorate( final Element e ) throws JDOMException {
         out.println();
-        liStack.push( markupUl() );
+        liStack.addFirst( markupUl() );
         chain.translate( e );
-        liStack.pop();
+        liStack.removeFirst();
     }
 
     /**
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/WikiSyntaxDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/WikiSyntaxDecorator.java
index 61af84d..f81536c 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/WikiSyntaxDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/WikiSyntaxDecorator.java
@@ -27,15 +27,15 @@ import org.jdom2.JDOMException;
 import org.jdom2.Text;
 
 import java.io.PrintWriter;
+import java.util.Deque;
 import java.util.Map;
-import java.util.Stack;
 
 
 /**
  * <p>Base Syntax decorator which translates to JSPWiki syntax. Delegates each kind of XHTML element to its specific
  * decorator.</p>
  * <p>This class is useful when developing a new wiki syntax decorator - just extend from it and provide the implementations of all
- * the needed Decorators on the {@link SyntaxDecorator#init(PrintWriter, Stack, Stack, WhitespaceTrimWriter, XHtmlToWikiConfig, XHtmlElementToWikiTranslator)} method</p>
+ * the needed Decorators on the {@link SyntaxDecorator#init(PrintWriter, Deque, Deque, WhitespaceTrimWriter, XHtmlToWikiConfig, XHtmlElementToWikiTranslator)} method</p>
  */
 public abstract class WikiSyntaxDecorator implements SyntaxDecorator {
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiBrDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiBrDecorator.java
index f9cd615..84c15ed 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiBrDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiBrDecorator.java
@@ -22,7 +22,7 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.apache.wiki.htmltowiki.syntax.BrDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -30,7 +30,7 @@ import java.util.Stack;
  */
 class JSPWikiBrDecorator extends BrDecorator {
 
-    JSPWikiBrDecorator( final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    JSPWikiBrDecorator( final PrintWriter out, final Deque< String > preStack, final XHtmlElementToWikiTranslator chain ) {
         super( out, preStack, chain );
     }
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiCodeDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiCodeDecorator.java
index 9e8b613..b6e377f 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiCodeDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiCodeDecorator.java
@@ -22,7 +22,7 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.apache.wiki.htmltowiki.syntax.CodeDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -30,7 +30,7 @@ import java.util.Stack;
  */
 class JSPWikiCodeDecorator extends CodeDecorator {
 
-    JSPWikiCodeDecorator( final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    JSPWikiCodeDecorator( final PrintWriter out, final Deque< String > preStack, final XHtmlElementToWikiTranslator chain ) {
         super( out, preStack, chain );
     }
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiLiDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiLiDecorator.java
index e748ea3..563371a 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiLiDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiLiDecorator.java
@@ -22,7 +22,8 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.apache.wiki.htmltowiki.syntax.LiDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
+import java.util.Iterator;
 
 
 /**
@@ -30,14 +31,19 @@ import java.util.Stack;
  */
 class JSPWikiLiDecorator extends LiDecorator {
 
-    JSPWikiLiDecorator( final PrintWriter out, final Stack< String > liStack, final XHtmlElementToWikiTranslator chain ) {
+    JSPWikiLiDecorator( final PrintWriter out, final Deque< String > liStack, final XHtmlElementToWikiTranslator chain ) {
         super( out, liStack, chain );
     }
 
     /** {@inheritDoc} */
     @Override
-    protected String markupLi( final Stack< String > liStack ) {
-        return String.join( "", liStack ) + " ";
+    protected String markupLi( final Deque< String > liStack ) {
+        final StringBuilder li = new StringBuilder();
+        final Iterator< String > iterator = liStack.descendingIterator();
+        while( iterator.hasNext() ) {
+            li.append( iterator.next() );
+        }
+        return li + " ";
     }
 
 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiOlDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiOlDecorator.java
index ab8ee68..49ebc1b 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiOlDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiOlDecorator.java
@@ -22,7 +22,7 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.apache.wiki.htmltowiki.syntax.OlDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -30,7 +30,7 @@ import java.util.Stack;
  */
 class JSPWikiOlDecorator extends OlDecorator {
 
-    JSPWikiOlDecorator( final PrintWriter out, final Stack< String > liStack, final XHtmlElementToWikiTranslator chain ) {
+    JSPWikiOlDecorator( final PrintWriter out, final Deque< String > liStack, final XHtmlElementToWikiTranslator chain ) {
         super( out, liStack, chain );
     }
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextBoldDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextBoldDecorator.java
index 52ac526..f014f6c 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextBoldDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextBoldDecorator.java
@@ -23,7 +23,6 @@ import org.apache.wiki.htmltowiki.syntax.PlainTextBoldDecorator;
 import org.apache.wiki.htmltowiki.syntax.PlainTextItalicDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
 
 
 /**
@@ -31,8 +30,8 @@ import java.util.Stack;
  */
 class JSPWikiPlainTextBoldDecorator extends PlainTextBoldDecorator {
 
-    JSPWikiPlainTextBoldDecorator( final PlainTextItalicDecorator ptid, final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
-        super( ptid, out, preStack, chain );
+    JSPWikiPlainTextBoldDecorator( final PlainTextItalicDecorator ptid, final PrintWriter out, final XHtmlElementToWikiTranslator chain ) {
+        super( ptid, out, chain );
     }
 
     /** {@inheritDoc} */
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextCssDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextCssDecorator.java
index 3d9cceb..1aab16c 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextCssDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextCssDecorator.java
@@ -23,7 +23,6 @@ import org.apache.wiki.htmltowiki.syntax.PlainTextBoldDecorator;
 import org.apache.wiki.htmltowiki.syntax.PlainTextCssDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
 
 
 /**
@@ -31,8 +30,8 @@ import java.util.Stack;
  */
 class JSPWikiPlainTextCssDecorator extends PlainTextCssDecorator {
 
-    JSPWikiPlainTextCssDecorator( final PlainTextBoldDecorator ptbd, final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
-        super( ptbd, out, preStack, chain );
+    JSPWikiPlainTextCssDecorator( final PlainTextBoldDecorator ptbd, final PrintWriter out, final XHtmlElementToWikiTranslator chain ) {
+        super( ptbd, out, chain );
     }
 
     /** {@inheritDoc} */
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextCssSpecialDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextCssSpecialDecorator.java
index 459f8c0..a7dfd89 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextCssSpecialDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextCssSpecialDecorator.java
@@ -22,7 +22,6 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.apache.wiki.htmltowiki.syntax.PlainTextCssSpecialDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
 
 
 /**
@@ -30,8 +29,8 @@ import java.util.Stack;
  */
 class JSPWikiPlainTextCssSpecialDecorator extends PlainTextCssSpecialDecorator {
 
-    JSPWikiPlainTextCssSpecialDecorator( final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
-        super( out, preStack, chain );
+    JSPWikiPlainTextCssSpecialDecorator( final PrintWriter out, final XHtmlElementToWikiTranslator chain ) {
+        super( out, chain );
     }
 
     /** {@inheritDoc} */
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextItalicDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextItalicDecorator.java
index 2f0c307..9e23511 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextItalicDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextItalicDecorator.java
@@ -23,7 +23,6 @@ import org.apache.wiki.htmltowiki.syntax.PlainTextItalicDecorator;
 import org.apache.wiki.htmltowiki.syntax.PlainTextMonospaceDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
 
 
 /**
@@ -31,8 +30,8 @@ import java.util.Stack;
  */
 class JSPWikiPlainTextItalicDecorator extends PlainTextItalicDecorator {
 
-    JSPWikiPlainTextItalicDecorator( final PlainTextMonospaceDecorator ptmd, final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
-        super( ptmd, out, preStack, chain );
+    JSPWikiPlainTextItalicDecorator( final PlainTextMonospaceDecorator ptmd, final PrintWriter out, final XHtmlElementToWikiTranslator chain ) {
+        super( ptmd, out, chain );
     }
 
     /** {@inheritDoc} */
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextMonospaceDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextMonospaceDecorator.java
index 23a7c63..440bc1c 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextMonospaceDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiPlainTextMonospaceDecorator.java
@@ -23,7 +23,7 @@ import org.apache.wiki.htmltowiki.syntax.PlainTextCssSpecialDecorator;
 import org.apache.wiki.htmltowiki.syntax.PlainTextMonospaceDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -31,7 +31,7 @@ import java.util.Stack;
  */
 class JSPWikiPlainTextMonospaceDecorator extends PlainTextMonospaceDecorator {
 
-    JSPWikiPlainTextMonospaceDecorator( final PlainTextCssSpecialDecorator ptcsd, final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    JSPWikiPlainTextMonospaceDecorator( final PlainTextCssSpecialDecorator ptcsd, final PrintWriter out, final Deque< String > preStack, final XHtmlElementToWikiTranslator chain ) {
         super( ptcsd, out, preStack, chain );
     }
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiSyntaxDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiSyntaxDecorator.java
index 2034fbd..8200cba 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiSyntaxDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiSyntaxDecorator.java
@@ -31,7 +31,7 @@ import org.apache.wiki.htmltowiki.syntax.TrDecorator;
 import org.apache.wiki.htmltowiki.syntax.WikiSyntaxDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -42,8 +42,8 @@ public class JSPWikiSyntaxDecorator extends WikiSyntaxDecorator {
     /** {@inheritDoc} */
     @Override
     public void init( final PrintWriter out,
-                      final Stack< String > liStack,
-                      final Stack< String > preStack,
+                      final Deque< String > liStack,
+                      final Deque< String > preStack,
                       final WhitespaceTrimWriter outTrimmer,
                       final XHtmlToWikiConfig config,
                       final XHtmlElementToWikiTranslator chain ) {
@@ -51,12 +51,12 @@ public class JSPWikiSyntaxDecorator extends WikiSyntaxDecorator {
         this.outTrimmer = outTrimmer;
         this.chain = chain;
 
-        this.cssStyle = new JSPWikiPlainTextCssSpecialDecorator( out, preStack, chain );
+        this.cssStyle = new JSPWikiPlainTextCssSpecialDecorator( out, chain );
         this.pre = new JSPWikiPlainTextMonospaceDecorator( cssStyle, out, preStack, chain );
-        this.em = new JSPWikiPlainTextItalicDecorator( pre, out, preStack, chain );
-        this.strong = new JSPWikiPlainTextBoldDecorator( em, out, preStack, chain );
-        this.css = new JSPWikiPlainTextCssDecorator( strong, out, preStack, chain );
-        this.plainText = new PlainTextDecorator( css, out, preStack, chain );
+        this.em = new JSPWikiPlainTextItalicDecorator( pre, out, chain );
+        this.strong = new JSPWikiPlainTextBoldDecorator( em, out, chain );
+        this.css = new JSPWikiPlainTextCssDecorator( strong, out, chain );
+        this.plainText = new PlainTextDecorator( css, out, chain );
 
         this.a = new JSPWikiADecorator( out, config, chain );
         this.br = new JSPWikiBrDecorator( out, preStack, chain );
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiTdDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiTdDecorator.java
index 38cdbf0..2f4778a 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiTdDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiTdDecorator.java
@@ -22,7 +22,7 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.apache.wiki.htmltowiki.syntax.TdDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -30,7 +30,7 @@ import java.util.Stack;
  */
 class JSPWikiTdDecorator extends TdDecorator {
 
-    JSPWikiTdDecorator( final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    JSPWikiTdDecorator( final PrintWriter out, final Deque< String > preStack, final XHtmlElementToWikiTranslator chain ) {
         super( out, preStack, chain );
     }
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiThDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiThDecorator.java
index 343c115..95a71a0 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiThDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiThDecorator.java
@@ -22,7 +22,7 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.apache.wiki.htmltowiki.syntax.ThDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -30,7 +30,7 @@ import java.util.Stack;
  */
 class JSPWikiThDecorator extends ThDecorator {
 
-    JSPWikiThDecorator( final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    JSPWikiThDecorator( final PrintWriter out, final Deque< String > preStack, final XHtmlElementToWikiTranslator chain ) {
         super( out, preStack, chain );
     }
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiUlDecorator.java b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiUlDecorator.java
index 8010c34..244a4ee 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiUlDecorator.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiUlDecorator.java
@@ -22,7 +22,7 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.apache.wiki.htmltowiki.syntax.UlDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -30,7 +30,7 @@ import java.util.Stack;
  */
 class JSPWikiUlDecorator extends UlDecorator {
 
-    JSPWikiUlDecorator( final PrintWriter out, final Stack< String > liStack, final XHtmlElementToWikiTranslator chain ) {
+    JSPWikiUlDecorator( final PrintWriter out, final Deque< String > liStack, final XHtmlElementToWikiTranslator chain ) {
         super( out, liStack, chain );
     }
 
diff --git a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownBrDecorator.java b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownBrDecorator.java
index 9f25eb9..fa16244 100644
--- a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownBrDecorator.java
+++ b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownBrDecorator.java
@@ -24,7 +24,7 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.apache.wiki.htmltowiki.syntax.BrDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -34,7 +34,7 @@ class MarkdownBrDecorator extends BrDecorator {
 
     private static final String INDENTATION_UNIT = StringUtils.repeat( WhitespaceTrimWriter.NO_TRIMMED_SPACE, 2 );
 
-    MarkdownBrDecorator( final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    MarkdownBrDecorator( final PrintWriter out, final Deque< String > preStack, final XHtmlElementToWikiTranslator chain ) {
         super( out, preStack, chain );
     }
 
diff --git a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownCodeDecorator.java b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownCodeDecorator.java
index 8ba0c1f..c5f66e7 100644
--- a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownCodeDecorator.java
+++ b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownCodeDecorator.java
@@ -22,7 +22,7 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.apache.wiki.htmltowiki.syntax.CodeDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -30,7 +30,7 @@ import java.util.Stack;
  */
 class MarkdownCodeDecorator extends CodeDecorator {
 
-    MarkdownCodeDecorator( final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    MarkdownCodeDecorator( final PrintWriter out, final Deque< String > preStack, final XHtmlElementToWikiTranslator chain ) {
         super( out, preStack, chain );
     }
 
diff --git a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownLiDecorator.java b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownLiDecorator.java
index 37b600c..c0aad88 100644
--- a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownLiDecorator.java
+++ b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownLiDecorator.java
@@ -24,7 +24,7 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.apache.wiki.htmltowiki.syntax.LiDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -34,13 +34,13 @@ class MarkdownLiDecorator extends LiDecorator {
 
     private static final String INDENTATION_UNIT = StringUtils.repeat( WhitespaceTrimWriter.NO_TRIMMED_SPACE, 4 );
 
-    MarkdownLiDecorator( final PrintWriter out, final Stack< String > liStack, final XHtmlElementToWikiTranslator chain ) {
+    MarkdownLiDecorator( final PrintWriter out, final Deque< String > liStack, final XHtmlElementToWikiTranslator chain ) {
         super( out, liStack, chain );
     }
 
     /** {@inheritDoc} */
     @Override
-    protected String markupLi( final Stack< String > liStack ) {
+    protected String markupLi( final Deque< String > liStack ) {
         final String liIndentation = StringUtils.repeat( INDENTATION_UNIT, liStack.size() - 1 );
         return liIndentation + liStack.peek() + " ";
     }
diff --git a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownOlDecorator.java b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownOlDecorator.java
index 0ebecdf..4967b32 100644
--- a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownOlDecorator.java
+++ b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownOlDecorator.java
@@ -22,7 +22,7 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.apache.wiki.htmltowiki.syntax.OlDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -30,7 +30,7 @@ import java.util.Stack;
  */
 class MarkdownOlDecorator extends OlDecorator {
 
-    MarkdownOlDecorator( final PrintWriter out, final Stack< String > liStack, final XHtmlElementToWikiTranslator chain ) {
+    MarkdownOlDecorator( final PrintWriter out, final Deque< String > liStack, final XHtmlElementToWikiTranslator chain ) {
         super( out, liStack, chain );
     }
 
diff --git a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextBoldDecorator.java b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextBoldDecorator.java
index ef42958..6c60c1f 100644
--- a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextBoldDecorator.java
+++ b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextBoldDecorator.java
@@ -23,7 +23,6 @@ import org.apache.wiki.htmltowiki.syntax.PlainTextBoldDecorator;
 import org.apache.wiki.htmltowiki.syntax.PlainTextItalicDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
 
 
 /**
@@ -31,8 +30,8 @@ import java.util.Stack;
  */
 class MarkdownPlainTextBoldDecorator extends PlainTextBoldDecorator {
 
-    MarkdownPlainTextBoldDecorator( final PlainTextItalicDecorator ptid, final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
-        super( ptid, out, preStack, chain );
+    MarkdownPlainTextBoldDecorator( final PlainTextItalicDecorator ptid, final PrintWriter out, final XHtmlElementToWikiTranslator chain ) {
+        super( ptid, out, chain );
     }
 
     /** {@inheritDoc} */
diff --git a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextCssDecorator.java b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextCssDecorator.java
index 0cbc675..018013e 100644
--- a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextCssDecorator.java
+++ b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextCssDecorator.java
@@ -23,7 +23,6 @@ import org.apache.wiki.htmltowiki.syntax.PlainTextBoldDecorator;
 import org.apache.wiki.htmltowiki.syntax.PlainTextCssDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
 
 
 /**
@@ -31,8 +30,8 @@ import java.util.Stack;
  */
 class MarkdownPlainTextCssDecorator extends PlainTextCssDecorator {
 
-    MarkdownPlainTextCssDecorator( final PlainTextBoldDecorator ptbd, final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
-        super( ptbd, out, preStack, chain );
+    MarkdownPlainTextCssDecorator( final PlainTextBoldDecorator ptbd, final PrintWriter out, final XHtmlElementToWikiTranslator chain ) {
+        super( ptbd, out, chain );
     }
 
     /** {@inheritDoc} */
diff --git a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextCssSpecialDecorator.java b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextCssSpecialDecorator.java
index 2d7965d..57158f2 100644
--- a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextCssSpecialDecorator.java
+++ b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextCssSpecialDecorator.java
@@ -22,7 +22,6 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.apache.wiki.htmltowiki.syntax.PlainTextCssSpecialDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
 
 
 /**
@@ -30,8 +29,8 @@ import java.util.Stack;
  */
 class MarkdownPlainTextCssSpecialDecorator extends PlainTextCssSpecialDecorator {
 
-    MarkdownPlainTextCssSpecialDecorator( final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
-        super( out, preStack, chain );
+    MarkdownPlainTextCssSpecialDecorator( final PrintWriter out, final XHtmlElementToWikiTranslator chain ) {
+        super( out, chain );
     }
 
     /** {@inheritDoc} */
diff --git a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextItalicDecorator.java b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextItalicDecorator.java
index 397c41f..3f0f6ee 100644
--- a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextItalicDecorator.java
+++ b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextItalicDecorator.java
@@ -23,7 +23,6 @@ import org.apache.wiki.htmltowiki.syntax.PlainTextItalicDecorator;
 import org.apache.wiki.htmltowiki.syntax.PlainTextMonospaceDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
 
 
 /**
@@ -31,8 +30,8 @@ import java.util.Stack;
  */
 class MarkdownPlainTextItalicDecorator extends PlainTextItalicDecorator {
 
-    MarkdownPlainTextItalicDecorator( final PlainTextMonospaceDecorator ptmd, final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
-        super( ptmd, out, preStack, chain );
+    MarkdownPlainTextItalicDecorator( final PlainTextMonospaceDecorator ptmd, final PrintWriter out, final XHtmlElementToWikiTranslator chain ) {
+        super( ptmd, out, chain );
     }
 
     /** {@inheritDoc} */
diff --git a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextMonospaceDecorator.java b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextMonospaceDecorator.java
index 4f513b0..2806f28 100644
--- a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextMonospaceDecorator.java
+++ b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownPlainTextMonospaceDecorator.java
@@ -23,7 +23,7 @@ import org.apache.wiki.htmltowiki.syntax.PlainTextCssSpecialDecorator;
 import org.apache.wiki.htmltowiki.syntax.PlainTextMonospaceDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -31,7 +31,7 @@ import java.util.Stack;
  */
 class MarkdownPlainTextMonospaceDecorator extends PlainTextMonospaceDecorator {
 
-    MarkdownPlainTextMonospaceDecorator( final PlainTextCssSpecialDecorator ptcsd, final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    MarkdownPlainTextMonospaceDecorator( final PlainTextCssSpecialDecorator ptcsd, final PrintWriter out, final Deque< String > preStack, final XHtmlElementToWikiTranslator chain ) {
         super( ptcsd, out, preStack, chain );
     }
 
diff --git a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownSyntaxDecorator.java b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownSyntaxDecorator.java
index 1f3f99a..6959566 100644
--- a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownSyntaxDecorator.java
+++ b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownSyntaxDecorator.java
@@ -30,7 +30,7 @@ import org.apache.wiki.htmltowiki.syntax.TrDecorator;
 import org.apache.wiki.htmltowiki.syntax.WikiSyntaxDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -41,8 +41,8 @@ public class MarkdownSyntaxDecorator extends WikiSyntaxDecorator {
     /** {@inheritDoc} */
     @Override
     public void init( final PrintWriter out,
-                      final Stack< String > liStack,
-                      final Stack< String > preStack,
+                      final Deque< String > liStack,
+                      final Deque< String > preStack,
                       final WhitespaceTrimWriter outTrimmer,
                       final XHtmlToWikiConfig config,
                       final XHtmlElementToWikiTranslator chain ) {
@@ -50,12 +50,12 @@ public class MarkdownSyntaxDecorator extends WikiSyntaxDecorator {
         this.outTrimmer = outTrimmer;
         this.chain = chain;
 
-        this.cssStyle = new MarkdownPlainTextCssSpecialDecorator( out, preStack, chain );
+        this.cssStyle = new MarkdownPlainTextCssSpecialDecorator( out, chain );
         this.pre = new MarkdownPlainTextMonospaceDecorator( cssStyle, out, preStack, chain );
-        this.em = new MarkdownPlainTextItalicDecorator( pre, out, preStack, chain );
-        this.strong = new MarkdownPlainTextBoldDecorator( em, out, preStack, chain );
-        this.css = new MarkdownPlainTextCssDecorator( strong, out, preStack, chain );
-        this.plainText = new PlainTextDecorator( css, out, preStack, chain );
+        this.em = new MarkdownPlainTextItalicDecorator( pre, out, chain );
+        this.strong = new MarkdownPlainTextBoldDecorator( em, out, chain );
+        this.css = new MarkdownPlainTextCssDecorator( strong, out, chain );
+        this.plainText = new PlainTextDecorator( css, out, chain );
 
         this.a = new MarkdownADecorator( out, config, chain );
         this.br = new MarkdownBrDecorator( out, preStack, chain );
diff --git a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownTdDecorator.java b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownTdDecorator.java
index fec1e3d..69fe0fb 100644
--- a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownTdDecorator.java
+++ b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownTdDecorator.java
@@ -22,7 +22,7 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.apache.wiki.htmltowiki.syntax.TdDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -30,7 +30,7 @@ import java.util.Stack;
  */
 class MarkdownTdDecorator extends TdDecorator {
 
-    MarkdownTdDecorator( final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    MarkdownTdDecorator( final PrintWriter out, final Deque< String > preStack, final XHtmlElementToWikiTranslator chain ) {
         super( out, preStack, chain );
     }
 
diff --git a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownThDecorator.java b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownThDecorator.java
index d1efeec..aa6a4ae 100644
--- a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownThDecorator.java
+++ b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownThDecorator.java
@@ -22,7 +22,7 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.apache.wiki.htmltowiki.syntax.ThDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -30,7 +30,7 @@ import java.util.Stack;
  */
 class MarkdownThDecorator extends ThDecorator {
 
-    MarkdownThDecorator( final PrintWriter out, final Stack< String > preStack, final XHtmlElementToWikiTranslator chain ) {
+    MarkdownThDecorator( final PrintWriter out, final Deque< String > preStack, final XHtmlElementToWikiTranslator chain ) {
         super( out, preStack, chain );
     }
 
diff --git a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownUlDecorator.java b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownUlDecorator.java
index 60b865a..2284b48 100644
--- a/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownUlDecorator.java
+++ b/jspwiki-markdown/src/main/java/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownUlDecorator.java
@@ -22,7 +22,7 @@ import org.apache.wiki.htmltowiki.XHtmlElementToWikiTranslator;
 import org.apache.wiki.htmltowiki.syntax.UlDecorator;
 
 import java.io.PrintWriter;
-import java.util.Stack;
+import java.util.Deque;
 
 
 /**
@@ -30,7 +30,7 @@ import java.util.Stack;
  */
 class MarkdownUlDecorator extends UlDecorator {
 
-    MarkdownUlDecorator( final PrintWriter out, final Stack< String > liStack, final XHtmlElementToWikiTranslator chain ) {
+    MarkdownUlDecorator( final PrintWriter out, final Deque< String > liStack, final XHtmlElementToWikiTranslator chain ) {
         super( out, liStack, chain );
     }
 

[jspwiki] 05/06: JSPWIKI-79 - Ounce Labs Security Finding: Authentication - Change Password

Posted by ju...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git

commit 07e1f828b6d3a23b008f1197a3faaaaf2a353b00
Author: Juan Pablo Santos Rodríguez <ju...@gmail.com>
AuthorDate: Sun Feb 20 22:24:32 2022 +0100

    JSPWIKI-79 - Ounce Labs Security Finding: Authentication - Change Password
---
 .../src/main/java/org/apache/wiki/auth/DefaultUserManager.java |  9 ++++++---
 jspwiki-main/src/main/resources/templates/default.properties   |  2 ++
 .../src/main/resources/templates/default_es.properties         |  2 ++
 .../src/main/resources/templates/default_fr.properties         |  2 ++
 jspwiki-war/src/main/webapp/templates/210/ProfileTab.jsp       | 10 +++++-----
 jspwiki-war/src/main/webapp/templates/default/ProfileTab.jsp   | 10 +++++-----
 6 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/jspwiki-main/src/main/java/org/apache/wiki/auth/DefaultUserManager.java b/jspwiki-main/src/main/java/org/apache/wiki/auth/DefaultUserManager.java
index 99e78c6..56ddd19 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/auth/DefaultUserManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/auth/DefaultUserManager.java
@@ -313,7 +313,6 @@ public class DefaultUserManager implements UserManager {
     /** {@inheritDoc} */
     @Override
     public void validateProfile( final Context context, final UserProfile profile ) {
-        final boolean isNew = profile.isNew();
         final Session session = context.getWikiSession();
         final InputValidator validator = new InputValidator( SESSION_MESSAGES, context );
         final ResourceBundle rb = Preferences.getBundle( context, InternationalizationManager.CORE_BUNDLE );
@@ -341,19 +340,23 @@ public class DefaultUserManager implements UserManager {
         validator.validateNotNull( profile.getFullname(), rb.getString("security.user.fullname") );
         validator.validate( profile.getEmail(), rb.getString("security.user.email"), InputValidator.EMAIL );
 
-        // If new profile, passwords must match and can't be null
         if( !m_engine.getManager( AuthenticationManager.class ).isContainerAuthenticated() ) {
             final String password = profile.getPassword();
             if( password == null ) {
-                if( isNew ) {
+                if( profile.isNew() ) {
+                    // If new profile, passwords must match and can't be null
                     session.addMessage( SESSION_MESSAGES, rb.getString( "security.error.blankpassword" ) );
                 }
             } else {
                 final HttpServletRequest request = context.getHttpRequest();
+                final String password0 = ( request == null ) ? null : request.getParameter( "password0" );
                 final String password2 = ( request == null ) ? null : request.getParameter( "password2" );
                 if( !password.equals( password2 ) ) {
                     session.addMessage( SESSION_MESSAGES, rb.getString( "security.error.passwordnomatch" ) );
                 }
+                if( !profile.isNew() && !getUserDatabase().validatePassword( profile.getLoginName(), password0 ) ) {
+                    session.addMessage( SESSION_MESSAGES, rb.getString( "security.error.passwordnomatch" ) );
+                }
             }
         }
 
diff --git a/jspwiki-main/src/main/resources/templates/default.properties b/jspwiki-main/src/main/resources/templates/default.properties
index 501a65f..e9fe16f 100644
--- a/jspwiki-main/src/main/resources/templates/default.properties
+++ b/jspwiki-main/src/main/resources/templates/default.properties
@@ -418,6 +418,8 @@ prefs.loginname.cannotset.exists=You cannot set your login name because \
 
 prefs.password=Password *
 prefs.password.description=Sets your account password. It may not be blank.
+prefs.password0=Current Password *
+prefs.password1=New Password *
 prefs.password2=Password verify *
 prefs.password2.description=Re-type your password for verification.
 
diff --git a/jspwiki-main/src/main/resources/templates/default_es.properties b/jspwiki-main/src/main/resources/templates/default_es.properties
index 5519cde..e8b62e5 100644
--- a/jspwiki-main/src/main/resources/templates/default_es.properties
+++ b/jspwiki-main/src/main/resources/templates/default_es.properties
@@ -423,6 +423,8 @@ prefs.loginname.cannotset.exists=No puedes establecer tu nombre de inicio de ses
 
 prefs.password=Contrase�a *
 prefs.password.description=Establece la contrase�a de acceso a la cuenta. No puede estar en blanco.
+prefs.password0=Contrase�a Actual *
+prefs.password1=Nueva Contrase�a *
 prefs.password2=Verificaci�n de contrase�a *
 prefs.password2.description=Escribe tu contrase�a otra vez para verificarla.
 
diff --git a/jspwiki-main/src/main/resources/templates/default_fr.properties b/jspwiki-main/src/main/resources/templates/default_fr.properties
index a692aca..835b776 100644
--- a/jspwiki-main/src/main/resources/templates/default_fr.properties
+++ b/jspwiki-main/src/main/resources/templates/default_fr.properties
@@ -466,6 +466,8 @@ prefs.loginname.cannotset.exists=Vous ne pouvez pas fixer votre identifiant car
 
 prefs.password=Mot de passe *
 prefs.password.description=Fixe le mot de passe de votre compte. Il ne peut pas \u00EAtre blanc.
+prefs.password0=Mot de passe actuel *
+prefs.password1=nNouveau mot de passe *
 prefs.password2=V\u00E9rification du mot de passe *
 prefs.password2.description=Re-saisissez votre mot de passe pour v\u00E9rification.
 
diff --git a/jspwiki-war/src/main/webapp/templates/210/ProfileTab.jsp b/jspwiki-war/src/main/webapp/templates/210/ProfileTab.jsp
index 50349af..969734f 100644
--- a/jspwiki-war/src/main/webapp/templates/210/ProfileTab.jsp
+++ b/jspwiki-war/src/main/webapp/templates/210/ProfileTab.jsp
@@ -40,7 +40,7 @@
        value='profile'/></wiki:Link></wiki:CheckRequestContext>" 
           id="editProfile" 
        class="wikiform"
-    onsubmit="return Wiki.submitOnce( this );"
+     onsubmit="return Wiki.submitOnce( this );"
       method="post" accept-charset="UTF-8">
 
       <h3>
@@ -80,12 +80,12 @@
      <!-- Password; not displayed if container auth used -->
      <wiki:UserProfile property="canChangePassword">
        <tr>
+         <td><label for="password0">Old</label>&nbsp;</label></td>
+         <td><input type="password" name="password0" id="password0" size="20" value="" />&nbsp;&nbsp;</td>
+       </tr>
+       <tr>
          <td><label for="password"><fmt:message key="prefs.password"/></label></td>
          <td>
-            <%--FIXME Enter Old PW to validate change flow, not yet treated by JSPWiki
-            <label for="password0">Old</label>&nbsp;
-            <input type="password" name="password0" id="password0" size="20" value="" />
-            &nbsp;&nbsp;--%>
             <input type="password" name="password" id="password" size="20" value="" />
           </td>
         </tr>
diff --git a/jspwiki-war/src/main/webapp/templates/default/ProfileTab.jsp b/jspwiki-war/src/main/webapp/templates/default/ProfileTab.jsp
index d37b275..36a7bef 100644
--- a/jspwiki-war/src/main/webapp/templates/default/ProfileTab.jsp
+++ b/jspwiki-war/src/main/webapp/templates/default/ProfileTab.jsp
@@ -98,11 +98,11 @@
      <!-- Password field; not displayed if container auth used -->
      <wiki:UserProfile property="canChangePassword">
      <div class="form-group">
-       <label class="control-label form-col-20" for="password"><fmt:message key="prefs.password"/></label>
-       <%--FIXME Enter Old PW to validate change flow, not yet treated by JSPWiki
-            <label class="control-label form-col-20" for="password0">Old</label>&nbsp;
-            <input type="password" name="password0" id="password0" size="20" value="" />
-       --%>
+       <label class="control-label form-col-20" for="password0"><fmt:message key="prefs.password0"/></label>&nbsp;
+       <input class="form-control form-col-50" type="password" name="password0" id="password0" size="20" value="" />
+     </div>
+     <div class="form-group">
+       <label class="control-label form-col-20" for="password"><fmt:message key="prefs.password1"/></label>
        <input class="form-control form-col-50" type="password" name="password" id="password" size="20" value="" required/>
      </div>
      <div class="form-group">