ticket_article_dos_test.rb 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. # encoding: utf-8
  2. require 'test_helper'
  3. class TicketArticleDos < ActiveSupport::TestCase
  4. test 'check body size' do
  5. org_community = Organization.create_if_not_exists(
  6. name: 'Zammad Foundation',
  7. )
  8. user_community = User.create_or_update(
  9. login: 'article.dos@example.org',
  10. firstname: 'Article',
  11. lastname: 'Dos',
  12. email: 'article.dos@example.org',
  13. password: '',
  14. active: true,
  15. roles: [ Role.find_by(name: 'Customer') ],
  16. organization_id: org_community.id,
  17. updated_by_id: 1,
  18. created_by_id: 1,
  19. )
  20. UserInfo.current_user_id = user_community.id
  21. ApplicationHandleInfo.current = 'test.postmaster'
  22. ticket1 = Ticket.create!(
  23. group_id: Group.first.id,
  24. customer_id: user_community.id,
  25. title: 'DoS 1!',
  26. updated_by_id: 1,
  27. created_by_id: 1,
  28. )
  29. article1 = Ticket::Article.create!(
  30. ticket_id: ticket1.id,
  31. type_id: Ticket::Article::Type.find_by(name: 'phone').id,
  32. sender_id: Ticket::Article::Sender.find_by(name: 'Customer').id,
  33. from: 'Zammad Feedback <feedback@example.org>',
  34. body: Array.new(2_000_000) { [*'0'..'9', *'a'..'z', ' ', ' ', ' ', '. '].sample }.join,
  35. internal: false,
  36. updated_by_id: 1,
  37. created_by_id: 1,
  38. )
  39. assert_equal(1_500_000, article1.body.length)
  40. ticket2 = Ticket.create!(
  41. group_id: Group.first.id,
  42. customer_id: user_community.id,
  43. title: 'DoS 2!',
  44. updated_by_id: 1,
  45. created_by_id: 1,
  46. )
  47. article2 = Ticket::Article.create!(
  48. ticket_id: ticket2.id,
  49. type_id: Ticket::Article::Type.find_by(name: 'phone').id,
  50. sender_id: Ticket::Article::Sender.find_by(name: 'Customer').id,
  51. from: 'Zammad Feedback <feedback@example.org>',
  52. body: "\u0000#{Array.new(2_000_000) { [*'0'..'9', *'a'..'z', ' ', ' ', ' ', '. '].sample }.join}",
  53. internal: false,
  54. updated_by_id: 1,
  55. created_by_id: 1,
  56. )
  57. assert_equal(1_500_000, article2.body.length)
  58. ApplicationHandleInfo.current = 'web'
  59. ticket3 = Ticket.create!(
  60. group_id: Group.first.id,
  61. customer_id: user_community.id,
  62. title: 'DoS 3!',
  63. updated_by_id: 1,
  64. created_by_id: 1,
  65. )
  66. assert_raises(Exceptions::UnprocessableEntity) do
  67. article3 = Ticket::Article.create!(
  68. ticket_id: ticket3.id,
  69. type_id: Ticket::Article::Type.find_by(name: 'phone').id,
  70. sender_id: Ticket::Article::Sender.find_by(name: 'Customer').id,
  71. from: 'Zammad Feedback <feedback@example.org>',
  72. body: "\u0000#{Array.new(2_000_000) { [*'0'..'9', *'a'..'z', ' ', ' ', ' ', '. '].sample }.join}",
  73. internal: false,
  74. updated_by_id: 1,
  75. created_by_id: 1,
  76. )
  77. end
  78. end
  79. test 'check body size / cut if email' do
  80. email_raw_string = "From: me@example.com
  81. To: customer@example.com
  82. Subject: some new subject
  83. Some Text" + Array.new(2_000_000) { [*'0'..'9', *'a'..'z', ' ', ' ', ' ', '. '].sample }.join
  84. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, email_raw_string)
  85. assert_equal(1_500_000, article_p.body.length)
  86. end
  87. end