Unable to create folder with some UTF-8 characters
Description
Attachments
- 28 Mar 2017, 07:12 AM
is related to
relates to
Activity
Mark Golbeck September 4, 2024 at 7:11 PM
Since it's been over two years without any further information provided, we're closing this Jira issue for now. If more details become available in the future, we can reopen it. Thank you.
Matthew Buckett March 28, 2017 at 11:03 AMEdited
@Sam Ottenhoff yep, I think that's the right way to go too and looking at the code (briefly) the count is just used to present to the user so we could just present the number of direct members to the user instead.
Sam Ottenhoff March 28, 2017 at 10:53 AM
I'd love to get rid of these COUNT ... LIKE queries ....
Matthew Buckett March 28, 2017 at 10:49 AM
One problem with hashing the resource/collection ID that we don't then support the WHERE IN_COLLECTION like '...' queries which are used to calculate how many items are inside each folder.
org.sakaiproject.content.impl.ContentServiceSqlDefault#getNumContentResources2Sql
Matthew Jones March 28, 2017 at 7:39 AM
I think the best short term fix is either to fix the Validator class to work like FormattedText or to change all methods that call validator.escapeResourceName to call something in FormattedText instead. Maybe for 13 roadmap we can make the minimum MySQL version for Sakai to be 5.7.9 and increase all of this?
If I attempt to create a folder with a 4 byte character, then I get an error of:
org.sakaiproject.portal.api.PortalHandlerException: org.sakaiproject.tool.api.ToolException: java.lang.reflect.InvocationTargetException at org.sakaiproject.portal.charon.SkinnableCharonPortal.doGet(SkinnableCharonPortal.java:857) caused by: org.sakaiproject.tool.api.ToolException: java.lang.reflect.InvocationTargetException at org.sakaiproject.cheftool.ToolServlet.doGet(ToolServlet.java:236) caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) caused by: java.lang.RuntimeException: SqlService.dbWrite failure at org.sakaiproject.db.impl.BasicSqlService.dbWriteCount(BasicSqlService.java:1152) caused by: java.sql.SQLException: Incorrect string value: '\xF0\xA0\x9C\x8E/' for column 'COLLECTION_ID' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478) at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1274) at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:780) at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2073) at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2009) at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5094) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1994) at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61) at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java:-1) at org.sakaiproject.db.impl.BasicSqlService.dbWriteCount(BasicSqlService.java:1243) at org.sakaiproject.db.impl.BasicSqlService.dbWriteCount(BasicSqlService.java:1152) at org.sakaiproject.db.impl.BasicSqlService.dbWrite(BasicSqlService.java:1137) at org.sakaiproject.db.impl.BasicSqlService.dbWrite(BasicSqlService.java:1066) at org.sakaiproject.util.BaseDbDualSingleStorage.putResource(BaseDbDualSingleStorage.java:665) at org.sakaiproject.content.impl.DbContentService$DbStorage.putCollection(DbContentService.java:1387) at org.sakaiproject.content.impl.BaseContentService.addValidPermittedCollection(BaseContentService.java:2290) at org.sakaiproject.content.impl.BaseContentService.addCollection(BaseContentService.java:2205) at org.sakaiproject.content.impl.BaseContentService.addCollection(BaseContentService.java:2240) at org.sakaiproject.content.cover.ContentHostingService.addCollection(ContentHostingService.java:1087) at org.sakaiproject.content.tool.ResourcesAction.createFolders(ResourcesAction.java:1133) at org.sakaiproject.content.tool.ResourcesAction.finishAction(ResourcesAction.java:8225) at org.sakaiproject.content.tool.ResourcesAction.buildMainPanelContext(ResourcesAction.java:4852) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.sakaiproject.cheftool.VelocityPortletPaneledAction.toolModeDispatch(VelocityPortletPaneledAction.java:401) at org.sakaiproject.cheftool.ToolServlet.doGet(ToolServlet.java:236) at org.sakaiproject.cheftool.VelocityPortletPaneledAction.doGet(VelocityPortletPaneledAction.java:1154) at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) at org.sakaiproject.vm.ComponentServlet.service(ComponentServlet.java:56) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:411) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:720) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:466) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:358) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:318) at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:513) at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1487) at org.sakaiproject.portal.charon.handlers.ToolHandler.doTool(ToolHandler.java:204) at org.sakaiproject.portal.charon.handlers.ToolHandler.doGet(ToolHandler.java:100) at org.sakaiproject.portal.charon.SkinnableCharonPortal.doGet(SkinnableCharonPortal.java:857) at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:460) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:676) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2508) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2497) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745)