Skip to content

Commit

Permalink
fixed santizing code
Browse files Browse the repository at this point in the history
  • Loading branch information
leo committed Apr 15, 2005
1 parent 2ce6b28 commit d623103
Show file tree
Hide file tree
Showing 6 changed files with 91 additions and 41 deletions.
5 changes: 4 additions & 1 deletion src/org/snipsnap/net/CommentStoreServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,9 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)
}

private String sanitize(String parameter) {
return parameter.split("[\r\n]")[0];
if(parameter != null) {
return parameter.split("[\r\n]")[0];
}
return parameter;
}
}
5 changes: 4 additions & 1 deletion src/org/snipsnap/net/LoginServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,10 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)
}

private String sanitize(String parameter) {
return parameter.split("[\r\n]")[0];
if(parameter != null) {
return parameter.split("[\r\n]")[0];
}
return parameter;
}

protected void doGet(HttpServletRequest request, HttpServletResponse response)
Expand Down
5 changes: 4 additions & 1 deletion src/org/snipsnap/net/NewUserServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,9 @@ private void sendError(HttpSession session, Map errors, HttpServletRequest reque
}

private String sanitize(String parameter) {
return parameter.split("[\r\n]")[0];
if(parameter != null) {
return parameter.split("[\r\n]")[0];
}
return parameter;
}
}
87 changes: 65 additions & 22 deletions src/org/snipsnap/net/RenderServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,24 @@
import org.radeox.util.Service;
import org.snipsnap.graph.ContentRenderer;
import org.snipsnap.graph.HorizontalContentRenderer;
import org.snipsnap.graph.builder.StringTreeBuilder;
import org.snipsnap.graph.builder.TreeBuilder;
import org.snipsnap.graph.context.UrlContext;
import org.snipsnap.graph.renderer.HtmlMapRenderer;
import org.snipsnap.graph.renderer.Renderer;
import snipsnap.api.app.Application;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.io.IOException;
import java.util.Map;

/**
* Render special content added to a temporary store. This is used for the
Expand All @@ -47,55 +55,90 @@
* @version $Id$
*/
public class RenderServlet extends HttpServlet {
private final static String RENDER_ID = "__render_id";

private static Map contentMap = Collections.synchronizedMap(new HashMap());
private Map handlers = new HashMap();
private static Map handlers = new HashMap();
private final static ContentRenderer DEFAULT_HANDLER = new HorizontalContentRenderer();

/**
* Initialize the render servlet by loading the content handlers.
*/
static {
Iterator contentRenderer =
Service.providers(org.snipsnap.graph.ContentRenderer.class);
while (contentRenderer.hasNext()) {
ContentRenderer renderer = (ContentRenderer) contentRenderer.next();
handlers.put(renderer.getName(), renderer);
}
}


/**
* Add content to the temporary store and return an id that can be used to select
* the content later. The graph macro uses this to store the graph description
* here which is then handed over to the rendering handler to translate to an image.
* The id will persist until content for the same name is added.
* <p/>
* Example:
* &lt;img src="/exec/render?id=XXXX&handler=YYYY"/&gt;
*
* @param content the textual content to be rendered
* @return an it to add to the url for retrieving the rendered content
*/
public static String addContent(String content) {
String key = null;
public static String addContent(String name, String content) {
Application app = Application.get();
String baseId = RENDER_ID + name;
String renderId = null;
synchronized (contentMap) {
String key = null;
int add = 0;
int hashCode = content.hashCode();
do {
key = String.valueOf(hashCode + add++);
} while (contentMap.containsKey(key));
contentMap.put(key, content);
key = String.valueOf(baseId + add++);
} while (app.getObject(key) != null);
// store a dummy to ensure the id is taken
app.storeObject(key, "");
// store content with corresponding id
renderId = Integer.toHexString(key.hashCode());
contentMap.put(renderId, content);
}
return key;
return renderId;
}

/**
* Initialize the render servlet by loading the content handlers.
*
* @throws ServletException
*/
public void init() throws ServletException {
Iterator contentRenderer =
Service.providers(org.snipsnap.graph.ContentRenderer.class);
while (contentRenderer.hasNext()) {
ContentRenderer renderer = (ContentRenderer) contentRenderer.next();
handlers.put(renderer.getName(), renderer);
public static String getImageMap(String renderId, String handler) {
HtmlMapRenderer mapRenderer = new HtmlMapRenderer();
TreeBuilder builder = new StringTreeBuilder((String) contentMap.get(renderId));
ByteArrayOutputStream out = new ByteArrayOutputStream();

Renderer renderer = ((ContentRenderer) handlers.get(handler)).getRenderer();
if (null != renderer) {
UrlContext context = new UrlContext(renderId, renderer);
mapRenderer.render(builder.build(), out, context);
try {
out.flush();
out.close();
} catch (IOException e) {
// ignore as this is unlikely to happen
e.printStackTrace();
}
try {
return out.toString(Application.get().getConfiguration().getEncoding());
} catch (UnsupportedEncodingException e) {
return out.toString();
}
} else {
// we can't render the image map, so return comment
return "<!-- image map not possible, missing renderer for handler: " + handler + " -->";
}
}


public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {

String handler = request.getParameter("handler");
String id = request.getParameter("id");
String content = (String) contentMap.get(id);
contentMap.remove(id);

ContentRenderer renderer = (ContentRenderer) handlers.get(handler);
if (null == renderer) {
Expand Down
17 changes: 9 additions & 8 deletions src/org/snipsnap/net/SnipEditServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,15 @@

import org.radeox.util.Encoder;
import org.radeox.util.logging.Logger;
import snipsnap.api.app.Application;
import snipsnap.api.container.Components;
import org.snipsnap.security.AccessController;
import snipsnap.api.snip.Snip;
import snipsnap.api.snip.SnipSpace;
import snipsnap.api.label.Label;
import snipsnap.api.label.Labels;
import org.snipsnap.snip.label.TypeLabel;
import org.snipsnap.user.Permissions;
import org.snipsnap.user.Roles;
import org.snipsnap.user.Security;
import snipsnap.api.app.Application;
import snipsnap.api.container.Components;
import snipsnap.api.label.Label;
import snipsnap.api.label.Labels;
import snipsnap.api.snip.Snip;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
Expand Down Expand Up @@ -182,6 +180,9 @@ private List getTemplates() {
}

private String sanitize(String parameter) {
return parameter.split("[\r\n]")[0];
if (parameter != null) {
return parameter.split("[\r\n]")[0];
}
return parameter;
}
}
13 changes: 5 additions & 8 deletions src/org/snipsnap/net/SnipStoreServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,13 @@
package org.snipsnap.net;

import org.radeox.util.logging.Logger;
import snipsnap.api.app.Application;
import snipsnap.api.config.Configuration;
import snipsnap.api.container.Components;
import org.snipsnap.net.filter.MultipartWrapper;
import org.snipsnap.security.AccessController;
import snipsnap.api.snip.Snip;
import org.snipsnap.snip.SnipFormatter;
import org.snipsnap.user.AuthenticationService;
import snipsnap.api.snip.SnipLink;
import snipsnap.api.snip.SnipSpace;
import snipsnap.api.snip.SnipSpaceFactory;
import org.snipsnap.user.AuthenticationService;
import org.snipsnap.user.Permissions;
import org.snipsnap.user.Security;
import snipsnap.api.user.User;

import javax.servlet.RequestDispatcher;
Expand Down Expand Up @@ -160,6 +154,9 @@ public void doPost(HttpServletRequest request, HttpServletResponse response)
}

private String sanitize(String parameter) {
return parameter.split("[\r\n]")[0];
if (parameter != null) {
return parameter.split("[\r\n]")[0];
}
return parameter;
}
}

0 comments on commit d623103

Please sign in to comment.